SSHサーバーにログインするためのシェルスクリプト

SSHサーバーにログインするためのシェルスクリプト

スクリプトに記載されているパスワードを使用してSSHサーバーに自動的にログインできるシェルスクリプトを作成しようとしています。私は次のコードを書いた。

set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect 
{
   "[email protected]'s password" 
   {
      send "password\r" 
   }
}

コードがうまく機能せず、まだパスワードを求めます。誰でもこの問題を解決するのに役立ちますか?

答え1

expectあなたのようにSSHサーバーにログインするためのスクリプトを書いたことがありますが、私のスクリプトは次のようになります。

#!/usr/bin/expect

spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact

私の考えでは、interactこれがスクリプトから欠落している可能性があります。

答え2

あなたがやっていることは間違っています。あなたが望むのは、パスワードのないSSHキーペアを作成してから(サーバーがRSAキー認証をサポートしている限り)、パスワードを入力せずに入力できることです。秘密鍵を盗まれた場所に保管すると、セキュリティ上のリスクがあります。

この順序で:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Returnパスワードの入力を求められたらタップします。
  5. Return2番目に押して確認してください。

これで、ディレクトリに2つのファイルがあります。~/.sshは、リモートサーバーに安全に配置できる公開鍵です。パスワードのない秘密鍵です。mysshkey.pubmysshkeymysshkey.pubmysshkeyいいえリモートサーバー(または他の人がコピーを入手できる場所)に安全に配置できます。

SSH経由でアクセスしたいサーバーから:

  1. リモートサーバーにログイン
  2. mkdir -p ~/.ssh
  3. コンテンツをコピーして貼り付けますmysshkey.pub~/.ssh/authorized_keys
  4. これが何であるかを~/.ssh/authorized_keys確認してくださいchmod600

これをローカルマシンで実行するには、次のコマンドを実行します。

ssh -i ~/.ssh/mysshkey <remote_server_ip>

パスワードを入力せずにログインします。

これは、複数の場所にパスワードをハードコードせずにパスワードを変更する場合に更新する必要がないため、自動ログインを管理するためのより好ましい方法です。

答え3

Debianベースのディストリビューションでは、このパッケージsshpassはあなたが望むものをより簡単に達成する方法を提供します。このパッケージは他の多くの人気ディストリビューションで利用可能です。まず設定する必要があります。

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

次に、次のようにスクリプトからSSHコマンドを呼び出します。

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]

を使用してexpect

答え4

まず、sshPassをインストールしてくださいsudo apt-get install sshpass

次に、.bashrcファイルにエイリアスを作成します。

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'

次に、変更された .bashrc ファイルを再読み込みします。source ~/.bashrc

これで終わりました。

sshLoginこれで、上記で作成したエイリアスを使用して端末でsshを実行できます。

関連情報