ssh:ログインシェルの代わりにリモートホストでコマンドを実行する

ssh:ログインシェルの代わりにリモートホストでコマンドを実行する

localhostで接続していremote-serverますremote-server

期待どおりに動作します。

ssh remote-server "hostname"
remote-server

混乱しています。リモートサーバーのホスト名ではなくローカルホスト名を返すのはなぜですか?

ssh remote-server "print $HOST"
localhost

答え1

2番目のコードの例:

ssh remote-server "print $HOST"
localhost

偉大な人々として記録されるでしょう住宅検査診断ツールSC2029:

Bashは、エスケープされていない一重引用符引数をすべて拡張します。これは、問題のコードが次に関連していることを意味します。

SSHホスト「エコクライアントホスト名」

サーバーのホスト名ではなく、クライアントのホスト名を印刷します。

$HOSTNAMEで$をエスケープすると、文字通り送信され、サーバーで評価されます。

使用して

ssh host "print \$HOST"

または

ssh host 'print $HOST'

あなたはあなたをブロックすることができます地元の拡張ホストでシェルを実行しますが、シェルにホストremote-serverを拡張させます。

答え2

二重引用符を使用しているため、シェルは$HOSTコマンドを実行して起動する前にコマンドを評価するため、コマンドをリモートサーバーに送信しますsshprint localhost

代わりに一重引用符を使用してください。

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

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

関連情報