サーバーにログインし、rootパスワードを渡すためのsshスクリプト

サーバーにログインし、rootパスワードを渡すためのsshスクリプト

SSHログインプロセスを自動化するためにExpectスクリプトを作成しました。私のユーザーアカウントにrsaキーが設定されていますが、ログイン後にrootに切り替えたいのですが、リモートサーバーはパスワードを入力しません。リモートサーバーにパスワードを提供するスクリプトが表示されていますが、非表示にできるかどうか疑問に思います。しかし、なぜこれが止まるのか教えてくれる人はいますか?

#!/usr/bin/expect

spawn ssh <server> su - 
expect "Password"
send "MyPassword\r"
interact

まさにこの画面にあります:

Password: "password"

カーソルはすぐ下にあり、点滅し続けます。 /var/log/secureでスクリプトで作成されたログイン試行の行を、手動でルートを取得するための一般的なログイン試行と比較しました。

次のようにスクリプトを作成します。

Jun  7 15:17:50 <server> su: pam_unix(su-l:session): session opened for user root by (uid=1000)

手動で:

Jun  7 15:18:48 <server> su: pam_unix(su-l:session): session opened for user root by <user>(uid=1000)

唯一の違いは、手動ログインに私のユーザー名がリストされていることです。

コマンドを次に変更してみました。

spawn ssh <server> su - root
spawn ssh <server> sudo su

しかし、どちらも機能しません。これをどのように実行できますか?

ベストアンサー1

スクリプトでtty割り当てを強制するには、-tフラグを渡す必要があります。

spawn ssh -t <server> su -

これで期待どおりに動作します。

おすすめ記事