ssh、特定のシェルを起動し、リモートシステムでコマンドを実行しますか?

ssh、特定のシェルを起動し、リモートシステムでコマンドを実行しますか?

複数のユーザーがリモートコンピュータで同じユーザーアカウントを共有する状況があります。私は自分のファイルを書くための「プライベート」ディレクトリを持っており、.zshrc次の方法が欲しいです。

  1. SSH設定ファイル(たとえばControlMaster auto)のディレクティブを使用して、リモートシステムでSSHセッションを開始します。
  2. このセッションは Z シェルを実行します。
  3. 私の「個人」ディレクトリで実行されます.zshrc(共有ユーザーのホームディレクトリではありません)。

そのようなsshセッションを開始するエイリアスや簡単な方法があれば良いでしょう(これが私がOpenSSHの設定ファイルの使用を考慮する理由です)。しかし、他のアイデアも開いています!

OpenSSH設定ファイルを使用していますか?

OpenSSHのssh_configを読みました。マニュアルページLocalCommandディレクティブを使用して実行するコマンドを指定できます。地元のサーバーに正常に接続した後。これにより、configファイルに実行するコマンドを知らせる方法がある可能性があります。離れてサーバーに接続しましたが、うまくいかないようです。

ベストアンサー1

コマンドをリモートで実行する最も確実な方法は、SSHコマンドラインでコマンドを指定することです。 sshコマンドは常にリモートユーザーのシェルによって解釈されます。

ssh [email protected] '. ~/.profile; command_that_needs_environment_variables'
ssh -t [email protected] '. ~/.profile; exec zsh'

共有アカウントは一般的に良い考えではありません。可能であれば、各ユーザーに別々のアカウントを作成してください。共有アカウントへのアクセス権がない場合は、次のようにエイリアスを作成できます。

ssh -t [email protected] 'HOME=~/bob; . ~/.profile; exec zsh'

公開鍵認証を使用している場合(再度推奨)~/.ssh/authorized_keysで確認できます。この回答もっと説明したい。~/.ssh/authorized_keysサーバー上のメインラインを編集します(すべて1行にあります):

command="HOME=$HOME/bob;
     if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
       eval \"$SSH_ORIGINAL_COMMAND\";
     else exec \"$SHELL\"; fi" ssh-rsa AAAA…== [email protected]

おすすめ記事