ssh -t remotehost vim /tmp/x.txt
上記のようなコマンドを実行できることを知っています。
しかし、リモートマシンでローカルbashコードを実行できるようにしたいと思います。このため、リモートのbash -sを呼び出して、ローカルのbashコードを処理できるようにします。
ssh -t remotehost 'bash -s' <<< vim /tmp/x.txt
ただし、上記の例は「stdinは端末ではないため、擬似端末は割り当てられません」と示しています。 sshにstdin経由でローカルのbashコードを取得させ、リモートの「bash -s」経由で実行する方法はありますか?ありがとう。
ssh -t remotehost 'bash -s' <<< vim /tmp/x.txt
Sshプロセスへの標準入力がTTYではない場合、単一の-t
オプションでsshを実行しているため、「疑似端末は割り当てられません...」というメッセージが表示されます。 sshは、この場合に特にそのメッセージを出力します。 -tのドキュメント の意味:
-t
擬似端末割り当てを強制します。これは、リモートマシン上で任意の画面ベースのプログラムを実行するために使用できます。メニューサービスを実装する場合。 複数の-tオプションは、sshにローカルttyがない場合でも、tty割り当てを強制します。
-t
コマンドラインオプションは、ssh構成オプション RequestTTY に関連しています。
RequestTTY
セッションの擬似ttyを要求するかどうかを指定します。引数は、no(TTYを要求しない)、yes(標準入力がTTYの場合は常にTTYを要求する)、force(常にTTYを要求する)、またはauto(ログインセッションを開くときにTTYを要求する)のいずれかです。このオプションは、ssh(1)の-tおよび-Tフラグをミラーリングします。
単一の-t
は "RequestTTY yes"と同等ですが、そのうち2つは "RequestTTY force"と同等です。
リモートコマンドをTTYで実行する場合は、-t
を2回指定します。
ssh -tt remotehost 'bash -s' <<< vim /tmp/x.txt
or
ssh -t -t remotehost 'bash -s' <<< vim /tmp/x.txt
sshはリモートシステムにTTYを割り当て、そのメッセージを出力しません。
リモートシステムで実行されているコマンドがTTYを必要としない場合、-t
オプションを省略できます。
ssh remotehost 'bash -s' <<< vim /tmp/x.txt
以下があなたの目的に合っていると思います。
vim /tmp/x.txt ; ssh remotehost 'bash -s' < /tmp/x.txt
最初の式(vim ...
)を使用すると、/tmp/x.txt
というローカルファイルとしてリモートで実行するコマンドを指定できます。 2番目の式(ssh ...
)は、リモートbashインタープリターを呼び出し、ローカルファイルの内容を送信して実行します。この場合ssh
には-t
オプションが必要ないことに注意してください(擬似端末警告が発生します)。また、 ここで文字列を使用する必要はありません (<<<
)が、通常のファイル入力演算子(<
)を使用できます。
この解決策は、たとえば次のファイルの内容で機能するようです:
echo These commands are being executed on $HOSTNAME
echo This is a second command