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