Ssh
用於登錄 ssh 伺服器的 Shell 腳本
我嘗試編寫一個 shell 腳本,它可以使用腳本中提到的密碼自動登錄到 ssh 伺服器。我寫了以下程式碼:
set timeout 30 /usr/bin/ssh -p 8484 root@172.31.72.103 expect { "root@172.31.72.103's password" { send "password\r" } }
此程式碼執行不正常,仍然要求輸入密碼。有人可以幫我解決這個問題嗎
我曾經寫過一個
expect
腳本來登錄 ssh 伺服器(就像你的情況一樣),我的腳本是這樣的:#!/usr/bin/expect spawn ssh MyUserName@192.168.20.20 expect "password" send "MyPassword\r" interact
我認為
interact
您的腳本中可能缺少 。
你的做法是錯誤的。您要做的是生成一個無密碼的 ssh 密鑰對,然後(只要伺服器支持 RSA 密鑰身份驗證)您無需為所有人輸入密碼即可進入。如果您的私鑰儲存在可能被盜的地方,這將帶來安全風險。
按著這些次序:
mkdir -p ~/.ssh
cd ~/.ssh
ssh-keygen -type dsa -i mysshkeys
Return
提示輸入密碼時按- 再按
Return
一次確認。現在您的
~/.ssh
目錄中將有兩個文件,mysshkey.pub
並且mysshkey
.mysshkey.pub
是您的公鑰,這個可以安全地放在遠端伺服器上。mysshkey
是您的私人無密碼密鑰,放在遠端伺服器上(或其他人可以獲得副本的地方)是不安全的*。*在您希望通過 SSH 連接的伺服器上:
- 登錄到遠端伺服器
mkdir -p ~/.ssh
- 將內容複製並粘貼
mysshkey.pub
到~/.ssh/authorized_keys
- 確保這
~/.ssh/authorized_keys
是chmod
’d to600
現在,要在本地機器上執行它,請執行以下命令:
ssh -i ~/.ssh/mysshkey <remote_server_ip>
並且您將在不提示輸入密碼的情況下登錄。
這是管理自動登錄的一種更可取的方法,因為您最終不會在多個地方硬編碼密碼,如果您更改密碼則需要更新這些地方。