나는 이 질문의 맨 아래에 시작 스크립트를 작성하여 내 장치 중 하나가 VPS 시작 시 여러 개의 원격 전달 포트를 자동으로 생성하도록 했습니다. (초점을 유지하기 위해 LSB 레이블을 제거했지만 유효합니다.) 스크립트를 실행할 때 오류가 발생하지 않습니다. autossh 프로세스를 생성하지만 VPS에 대한 연결을 설정하지 않습니다. (클라이언트는 Debian Wheezy를 실행하는 Raspberry Pi이고, VPS는 Ubuntu Server 14.10입니다.) ssh
개별적으로 사용되는 명령하다잘 작동하는데 왜 시작 스크립트가 작동하지 않는지 모르겠습니다. 내가 알아차린 한 가지는(아래를 보면) -f
스크립트를 사용할 때 플래그가 프로세스에서 완전히 제거되지만 ssh
.PuTTY를 호출하면 -f
나머지 텍스트와 달리 녹색으로 플래그가 지정된다는 것입니다. 왜 이런 일이 발생하는지 또는 문제와 관련이 있는지 알려주지 마세요. (참고: 모든 포트 번호가 변경되었지만 여전히 서로 올바르게 연결되어 있습니다.)
내 공개 키가 정확하고 원격 호스트가 및 에 있습니다 known_hosts
. 매개 변수를 이스케이프하고 이스케이프하지 않으려고 시도했지만 아무런 차이가 없으며 플래그 주위에 따옴표를 이스케이프/사용해도 아무런 차이가 없습니다.user
root
-o
-f
고쳐 쓰다: ssh exited with error status 255; restarting ssh
ssh(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
매뉴얼 너머 :
-f
autossh를 사용하는 것과 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
보고 처리할 수 있어야 합니다 .autossh
ssh
$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 키입니다. 파일.