ローカル設定を使用したSSHログイン後に自動的にrootに切り替える

ローカル設定を使用したSSHログイン後に自動的にrootに切り替える

場合によっては、複数のサーバーにログインして 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にアクセスしようとすると、sshrootとして直接ログインしようとすることを意味します。これは、次の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_rsasudoroot

$ 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

残念ながら、私は予想されるスクリプトについてよく知らず、上記のスクリプトには改善が必要な可能性があるいくつかの領域があります。

  1. expect "密码:"うまくいかなかったので、に変更しましたPassword:Password:役に立たない。
  2. log_user 0もちろんパスワードを隠して送信された出力を抑えてみました。しかし、成功しませんでした。

関連情報