ユーザーがサーバーにSSH接続するときに使用されるシェルを設定するにはどうすればよいですか。たとえば、BASHを我慢できず、ZSHを使用する必要があり.zsh_profile
ます。マシンにsshするときにZSHがプロファイル()とともにロードされるようにするにはどうすればよいですか。
sshでたくさんのパラメーターを渡す必要はありません。デフォルトのシェルを設定できませんか?
ユーザーがサーバーにSSH接続するときに使用されるシェルを設定するにはどうすればよいですか。たとえば、BASHを我慢できず、ZSHを使用する必要があり.zsh_profile
ます。マシンにsshするときにZSHがプロファイル()とともにロードされるようにするにはどうすればよいですか。
sshでたくさんのパラメーターを渡す必要はありません。デフォルトのシェルを設定できませんか?
回答:
Linuxで実行していると仮定すると、chsh
コマンドを使用できます。
chsh -s /bin/ksh foo
chsh -s /bin/bash username
man chsh
シェルを変更し、常に機能するとは限りません
または、exec /bin/zsh
bashログインスクリプトを使用することもできます。これにより、bashインスタンスがシェルに置き換えられます。
またはあなたがすることができます ssh host "zsh -l"
L
ssh -t
最後のオプションのTTYを取得するために必要です。デフォルトでは、コマンド(などzsh -l
)が提供されると、OpenSSHは非ログインシェルを-l
実行します。これはTTYを割り当てず、それを変更しません(ログイン後に実行されるため)。
/ etc / passwdを編集して(権限がある場合、またはシステム管理者に問い合わせて)デフォルトのシェルを変更します。
ローカル.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'
/etc/shells
シェルを選択可能にするには、バイナリへのパスを指定する必要があることに注意してください。