SSH 接続後に切断せずにコマンドを実行するにはどうすればよいですか?

SSH 接続後に切断せずにコマンドを実行するにはどうすればよいですか?

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役に立ちませんでした。

リモート コマンドのみの場合は役に立ちませんlsls; bashまたは同様のものが必要です。

tty を要求したときに、 を要求しなかったようですbash。また、bashの後にを要求したときにls、 を要求しませんでした。両方が必要です。

ssh -t bla@bla "ls; bash"

擬似ls端末も使用します。「より広い視点」のセクションをお読みください。私のこの答え違いを学ぶため(特に「奇妙な点がある」と書かれている箇所)。

答え2

me@machine を削除するには、PS1 環境変数を設定する必要があります。次を試してください:

ssh bla@bla "PS1=\"\"; ls; bash"

関連情報