
ssh セッションが自動的に閉じられることなく、ssh 経由で別のマシンに接続した後、コマンドを自動的に実行したいと考えています。
インターネットで検索したところ、いくつかの解決策を見つけましたが、どれも私のニーズには合いませんでした。
ssh bla@bla "ls"
これにより、ls
リモート マシン上でコマンドが実行され、出力が表示され、接続が閉じられます。
また、SSH設定ファイルを編集してみました
Host bla
HostName bla
User bla
IdentityFile ~/.ssh/key
RemoteCommand ls
RequestTTY force
同じ問題です。これは ssh 経由で接続し、ls
コマンドを実行し、出力を表示してから終了します。RequestTTY
オプションも役に立ちませんでした。
ssh bla@bla "ls ; bash"
これは を実行した後も切断されませんls
が、完全なターミナル インターフェイスは表示されず、 が表示されない最低限のコマンド ラインだけが表示されますme@machine:~$ thing
。
私が本当に欲しいもの:
bash エイリアス、または.ssh/config
リモート マシンに接続してそこでコマンドを実行し、ターミナルを開いたままにする簡単なコマンドを入力できるエントリ。基本的には、これを手動で実行した場合と同じです。
タイプ
ssh blah@blah
そして接続したら次のように入力します
ls
答え1
ssh bla@bla "ls ; bash"
を実行した後、切断されることはあり
ls
ませんが、完全なターミナル インターフェイスは表示されず、何も表示されない最低限のコマンド ラインだけが表示されますme@machine:~$
。
コマンド(ls ; bash
上記など)を指定すると、SSH サーバーは疑似端末を提供しません。まさにこれを観察しました。
一方、 sole はssh bla@bla
デフォルトで擬似端末を割り当てます。これが必要なことです。擬似端末の割り当てを強制するには、-t
または を使用しますRequestTTY
。
オプションも
RequestTTY
役に立ちませんでした。
リモート コマンドのみの場合は役に立ちませんls
。ls; bash
または同様のものが必要です。
tty を要求したときに、 を要求しなかったようですbash
。また、bash
の後にを要求したときにls
、 を要求しませんでした。両方が必要です。
ssh -t bla@bla "ls; bash"
擬似ls
端末も使用します。「より広い視点」のセクションをお読みください。私のこの答え違いを学ぶため(特に「奇妙な点がある」と書かれている箇所)。
答え2
me@machine を削除するには、PS1 環境変数を設定する必要があります。次を試してください:
ssh bla@bla "PS1=\"\"; ls; bash"