ssh: 로그인 셸 대신 원격 호스트에서 명령 실행

ssh: 로그인 셸 대신 원격 호스트에서 명령 실행

localhost에서 연결 remote-server중이고 remote-server.

예상대로 작동합니다.

ssh remote-server "hostname"
remote-server

혼란스러워요. 원격 서버의 호스트 이름이 아닌 로컬 호스트 이름을 반환하는 이유는 무엇입니까?

ssh remote-server "print $HOST"
localhost

답변1

두 번째 코드 예:

ssh remote-server "print $HOST"
localhost

위대한 사람들로 기록될 것이다주택 검사진단 도구SC2029:

Bash는 이스케이프 처리되지 않은 작은따옴표 인수를 모두 확장합니다. 이는 문제의 코드가 다음과 관련이 있음을 의미합니다.

SSH 호스트 "에코 클라이언트 호스트 이름"

서버의 호스트 이름이 아닌 클라이언트의 호스트 이름을 인쇄합니다.

$HOSTNAME에서 $를 이스케이프 처리하면 문자 그대로 전송되어 서버에서 평가됩니다.

사용하여

ssh host "print \$HOST"

또는

ssh host 'print $HOST'

당신은 당신을 차단할 수 있습니다현지의확장 호스트에서 쉘을 실행하지만 쉘이 호스트 remote-server를 확장하도록 합니다.

답변2

큰따옴표를 사용하고 있기 때문에 쉘은 $HOST명령을 실행하고 시작하기 전에 명령을 평가하므로 " " 명령을 원격 서버로 보냅니다 ssh.print localhost

대신 작은따옴표를 사용하세요.

shadur@proteus:~$ ssh axiom "echo $HOSTNAME"
shadur@axiom's password:
proteus

shadur@proteus:~$ ssh axiom 'echo $HOSTNAME'
shadur@axiom's password:
axiom

관련 정보