shell腳本實現服務器免密登錄的實現
需求:半自動化實現服務器免密登錄(需要手動輸入密碼)
知識點解析
#生成一個數組,存儲服務器的ip,配置幾個服務器就寫幾個
SERVERS=("服務器1的地址" "服務器2的地址" "服務器3的地址")把本機的 id_rsa.pub 公鑰,自動追加到遠程服務器用戶的 ~/.ssh/authorized_keys 文件里。
id_rsa
SSH 生成的 RSA 算法私鑰文件,和它配對的公鑰文件是 id_rsa.pub,它們是免密登錄的基礎:
- 私鑰
id_rsa:必須保存在本機,相當于你的 “鑰匙”,絕對不能泄露給別人 - 公鑰
id_rsa.pub:可以分發(fā)到遠程服務器,相當于服務器上的 “鎖孔”,只有你的私鑰能打開它
[ ! -f $HOME/.ssh/id_rsa ] && ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa

ssh-copy-id -o StricHostKeyChecking=no $USER@server
ssh-copy-id
把本地的公鑰上傳到遠程服務器的工具,會自動寫入遠程用戶的~/.ssh/authorized_keys文件
-o StrictHostKeyChecking=no
關閉主機密鑰檢查,首次連接服務器時,不會彈出 “是否信任主機” 的交互式確認提示,避免腳本卡住
$USER@$server
遠程服務器的登錄信息,$USER是用戶名(這里是 root),$server是服務器 IP 地址(比如 192.168.88.101)顯示出來就是root@192.168.88.101
完整腳本
?? 重要注意事項
- 遠程服務器必須開啟 SSH 服務,且防火墻允許 22 端口。
- 腳本中使用的
root用戶,需要確保遠程服務器允許 root 用戶 SSH 登錄(部分服務器默認關閉)。
# 1. 檢查 SSH 服務狀態(tài) systemctl status sshd # 2. 如果沒開啟,啟動服務 systemctl start sshd # 3. 設置開機自啟(避免重啟后失效) systemctl enable sshd
firewalld(CentOS/RHEL 系列默認)
# 1. 放行 22 端口 firewall-cmd --permanent --add-port=22/tcp # 2. 重載防火墻規(guī)則(讓配置生效) firewall-cmd --reload # 3. 驗證端口是否放行成功 firewall-cmd --list-ports
vim mianmi.sh
#!/bin/bash
SERVERS=("192.168.88.101" "192.168.88.102" "192.168.88.103")
USER="root"
[ ! -f $HOME/.ssh/id_rsa ] && ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa
for server in "${SERVERS[@]}"
do
echo "開始配置免密登錄: $server"
ssh-copy-id -o StrictHostKeyChecking=no $USER@server
done 
chmod +x mianmi.sh ./mianmi.sh
看一下有沒有生效
ssh root@192.168.88.102
到此這篇關于shell腳本實現服務器免密登錄的實現的文章就介紹到這了,更多相關shell服務器免密登錄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux 通過 autojump 命令減少 cd 命令的使用的實現方法
這篇文章主要介紹了Linux 通過 autojump 命令減少 cd 命令的使用的實現方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

