スクリプトに記載されているパスワードを使用して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キー認証をサポートしている限り)、パスワードを入力せずに入力できることです。秘密鍵を盗まれた場所に保管すると、セキュリティ上のリスクがあります。
この順序で:
mkdir -p ~/.ssh
cd ~/.ssh
ssh-keygen -type dsa -i mysshkeys
- Returnパスワードの入力を求められたらタップします。
- Return2番目に押して確認してください。
これで、ディレクトリに2つのファイルがあります。~/.ssh
は、リモートサーバーに安全に配置できる公開鍵です。パスワードのない秘密鍵です。mysshkey.pub
mysshkey
mysshkey.pub
mysshkey
いいえリモートサーバー(または他の人がコピーを入手できる場所)に安全に配置できます。
SSH経由でアクセスしたいサーバーから:
- リモートサーバーにログイン
mkdir -p ~/.ssh
- コンテンツをコピーして貼り付けます
mysshkey.pub
。~/.ssh/authorized_keys
- これが何であるかを
~/.ssh/authorized_keys
確認してくださいchmod
600
これをローカルマシンで実行するには、次のコマンドを実行します。
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を実行できます。