Debian autossh 시작 스크립트가 제대로 작동하지 않습니다.

Debian autossh 시작 스크립트가 제대로 작동하지 않습니다.

나는 이 질문의 맨 아래에 시작 스크립트를 작성하여 내 장치 중 하나가 VPS 시작 시 여러 개의 원격 전달 포트를 자동으로 생성하도록 했습니다. (초점을 유지하기 위해 LSB 레이블을 제거했지만 유효합니다.) 스크립트를 실행할 때 오류가 발생하지 않습니다. autossh 프로세스를 생성하지만 VPS에 대한 연결을 설정하지 않습니다. (클라이언트는 Debian Wheezy를 실행하는 Raspberry Pi이고, VPS는 Ubuntu Server 14.10입니다.) ssh개별적으로 사용되는 명령하다잘 작동하는데 왜 시작 스크립트가 작동하지 않는지 모르겠습니다. 내가 알아차린 한 가지는(아래를 보면) -f스크립트를 사용할 때 플래그가 프로세스에서 완전히 제거되지만 ssh.PuTTY를 호출하면 -f나머지 텍스트와 달리 녹색으로 플래그가 지정된다는 것입니다. 왜 이런 일이 발생하는지 또는 문제와 관련이 있는지 알려주지 마세요. (참고: 모든 포트 번호가 변경되었지만 여전히 서로 올바르게 연결되어 있습니다.)

내 공개 키가 정확하고 원격 호스트가 및 에 있습니다 known_hosts. 매개 변수를 이스케이프하고 이스케이프하지 않으려고 시도했지만 아무런 차이가 없으며 플래그 주위에 따옴표를 이스케이프/사용해도 아무런 차이가 없습니다.userroot-o-f

고쳐 쓰다: ssh exited with error status 255; restarting sshssh(autossh 아님)와 같은 개별 명령을 실행하더라도 syslog에는 모든 autossh 행이 표시됩니다. 이 오류는 스크립트가 실행되는지 또는 스크립트의 행이 bash에서 직접 실행되는지에 관계없이 반환됩니다.

스크립트의 관련 부분 init.d:

case "$1" in
  start)
    echo "Creating SSH tunnels"
    autossh -M 0 -f -N -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
    #same command repeated twice more, everything exactly the same but with different ports
    ;;
  stop)
    echo "Stopping SSH tunnels..."
    ps axf | grep autossh | grep -v grep | awk '{print "kill -9 " $1}' | sh
    ;;
  *)
    echo "Usage: /etc/init.d/autossh-gen.sh {start|stop}"
    exit 1
    ;;
esac

ps aux | grep autossh실행하면 세 줄이 생성되지만 간결성을 위해 여기에는 하나만 넣겠습니다. 원격 서버에 대한 실제 연결은 설정되지 않습니다. 포트는 닫힌 상태로 유지됩니다. -f스크립트의 명령이 존재하지 않습니다 .

root     14137  0.0  0.1   1700   976 ?        Ss   01:37   0:00 /usr/lib/autossh/autossh -M 0    -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

이 ssh 명령을 실행하면 ...

ssh -f -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

...이것이 ps aux포트 로 출력됩니다.성공적으로 전달되었습니다.

root     14124  0.0  0.1   5728  1720 ?        Ss   01:31   0:00 ssh -f -N -o ServerAliveInterval 60 -o ServerAliveCountMax 3 -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

답변1

ssh exited with error status 255일반적으로 인증 또는 연결 문제를 나타냅니다. 옵션 autossh없이 명령을 실행해 보면 -f출력을 볼 수 있습니다.

autossh -M 0 -N -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

autossh매뉴얼 너머 :

-fautossh를 사용하는 것과 ssh를 사용하는 것 사이에는 중요한 차이점이 있습니다 -f.autossh ssh는 비밀번호나 패스프레이즈를 묻지 않습니다..

-v디버깅에 도움이 되는 전달 또는 -vv옵션을 시도해 볼 수도 있습니다 ssh.

autossh -M 0 -N -vv -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

또한 이 /usr/lib/autossh/autossh프로세스는 세션을 모니터링 ssh하고 필요한 경우 다시 시작합니다. 명령이 작동 하면 다음을 autossh보고 처리할 수 있어야 합니다 .autosshssh

$ps -eo user,pid,args | grep ssh
----------
someuser    16384  /usr/lib/autossh/autossh -M 33332    -N -R 11111:127.0.0.1:22222 serverip
someuser    16385  /usr/bin/ssh -L 33332:127.0.0.1:33332 -R 33332:127.0.0.1:33333 -N -R 11111:127.0.0.1:22222 serverip

-f그런데 해당 옵션을 에 전달할 필요가 없습니다 ssh. autossh기본적으로 백그라운드에서 실행됩니다.

답변2

초기화 스크립트는 수동으로 시도할 때와 다른 사용자 컨텍스트에서 실행될 수 있습니다. init 스크립트가 다른 사용자 ID로 실행되는 경우 개인 키 파일을 올바르게 읽을 수 있는지 확인하십시오.

중요한 파일 및 해당 권한에 알려진 구성 문제가 있습니다.

ssh 명령을 실행하는 사용자는 ID 파일에 액세스해야 하며 ssh는 사용자가 파일, .ssh 디렉터리를 소유하도록 엄격하게 요구할 수 있으며, .ssh 디렉터리의 권한은 700이고 개인 디렉터리의 권한은 600 키입니다. 파일.

관련 정보