場合によっては、複数のサーバーにログインして root に切り替える必要があります。
今私のSSH設定は次のようになります
Host *
User xxx
Port 32200
Host hostnamexxx
HostName xxx.xxx.xxx.xxx
IdentityFile /root/.ssh/id_rsa
サーバーにのみログインし、パスワードを使用して自動的にrootに切り替えるようにローカル(ssh)設定を変更できますか?
しかし、暗号化されていないファイルにパスワードを保存することは安全性が低いように見えます。
答え1
ログイン後、rootとして「切り替え」する代わりにrootとしてログインできますssh
。
設定ファイルに次の行を追加できますUser root
。
Host hostnamexxx
HostName xxx.xxx.xxx.xxx
User root
IdentityFile /root/.ssh/id_rsa
これは、ホスト名xxxにアクセスしようとすると、ssh
rootとして直接ログインしようとすることを意味します。これは、次のssh
コマンドを実行するのと同じです。
$ ssh -i /root/.ssh/id_rsa -l root hostnamexxx
ただし、ファイルは保護されており、rootとしてのみ読み取ることができるため、ファイルは使用できず、ターゲットホストに/root/.ssh/id_rsa
パスワードを要求します。root
$ ssh -i /root/.ssh/id_rsa -l root hostnamexxx
Warning: Identity file /root/.ssh/id_rsa not accessible: Permission denied.
Password:
パスワードを入力すると、root
ターゲットにrootとしてログインします。
パスワードを提供したくない場合(もちろん、権限があると仮定)から、root
ホームフォルダにIDファイルをコピーし、所有者をユーザーに変更できます。/root/.ssh/id_rsa
sudo
root
$ sudo cp /root/.ssh/id_rsa $HOME/.ssh/root_id_rsa && sudo chown <your username> $HOME/.ssh/root_id_rsa
その後$HOME/.ssh/root_id_rsa
で使用してくださいIdentityFile
。
答え2
expect
私はここでこれを処理できることがわかりました。質問と他のソース。
#!/usr/bin/expect
set HOSTNAME [lindex $argv 0]
spawn ssh -t $HOSTNAME su -
# expect "密码:"
log_user 0
send "xxxxx\r"
interact
必要に応じて、このスクリプトのエイリアスを設定できます。
alias sshr="/root/expect_ssh.sh"
このスクリプトは私のSSH設定とうまく機能しますが、コマンドによってはいくつかの変更が必要になることがありますspawn ssh
。
残念ながら、私は予想されるスクリプトについてよく知らず、上記のスクリプトには改善が必要な可能性があるいくつかの領域があります。
expect "密码:"
うまくいかなかったので、に変更しましたPassword:
。Password:
役に立たない。log_user 0
もちろんパスワードを隠して送信された出力を抑えてみました。しかし、成功しませんでした。