ユーザーがサーバーに SSH 接続するときに使用するシェルを設定するにはどうすればよいでしょうか。たとえば、BASH が苦手で ZSH を使用する必要がある場合、.zsh_profile
マシンに SSH 接続するときに、プロファイル ( ) とともに ZSH がロードされるようにするにはどうすればよいでしょうか。
ssh でたくさんのパラメータを渡す必要もありません。デフォルトのシェルを設定することはできないのでしょうか?
答え1
デフォルトのシェルを変更できない場合は、ssh -t user@host 'zsh -l'
これで動作します。
この-t
フラグは擬似端末の割り当てを強制し、-l
フラグはログインシェル。
答え2
Linux 上で実行している場合は、コマンドを使用できますchsh
。
chsh -s /bin/ksh foo
chsh -s /bin/bash username
答え3
man chsh
シェルを変更するが、必ずしも機能するわけではない
あるいは、bash ログイン スクリプトを挿入することもできます。これにより、exec /bin/zsh
bash インスタンスがシェルに置き換えられます。
あるいは、ssh host "zsh -l"
答え4
ローカルをリモート サーバーに配置する方法がわかりません.zshrc
(そこに永続的に保存しない)。これは、リモート サーバー上のログイン シェルを変更する場合に有効です。
共有アカウントなので、zsh
この方法では自分しか使えません。
~/.ssh/config
これをローカルマシンのファイルに追加します。
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
以下のように、あなたが探しているものを達成するためのハック的な方法があるかもしれません。
警告 これには保証はなく、「賢明」には見えませんが、これを使用してローカル ファイルをサーバーに配置し、ログイン シェルでソースを取得することができました。
Host someHost
HostName someIP
IdentityFile ~/.ssh/somekey.pem
RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
PermitLocalCommand yes
LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
RequestTTY force
User someUser
使い方?
RemoteCommand
リモート側で実行する必要があるものを定義します。LocalCommand
ローカルで実行する必要があるものを定義します。これは、ローカル ファイルをリモート サーバーにコピーしてソースとして使用するために使用されます。ここで問題となるのは、リモート ホストへの接続が「成功した」後にのみ実行されることです。
意味:
- リモートへの接続は開いていて有効である必要があります
- リモートシェルにはまだファイルがないので、ファイルがそこにあるまで待つ必要があります。
sleep
- ローカルは
sftp
ファイルをリモート サーバーに配置するために使用し、リモート サーバーはsleep
スクリプトから起動してソースを取得します。
かなりハックっぽいので、もっと良い方法があるかどうかも知りたいです。
更新: これは、「長い」スリープ時間の代わりに使用できます:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'