linux实现SSH免密登录设置,以及shell脚本实现
分享/朱季谦
最近在搭建linux集群,做了SSH免密登录的设置,正好把过程记录一下:
一.用搭建好的两台虚拟机做演示,A机器:192.168.200.129,B机器:192.168.200.128
二.分别在两台机器上执行以下步骤:
1.使用root登录A服务器:su – root
2.在登录的A服务器上通过指定加密算法指令ssh-keygen -t rsa来生成秘钥,执行完该指令一直回车即可。
说明:(1)ssh-keygen –t rsa是指定加密的算法是rsa
(2)(/root/.ssh/id_rsa)是保存秘钥的路径
(3)/root/.ssh/id_rsa.pub是生成的公钥
3.将公钥传到B服务器,以root用户登录B机器,回车后,当跳出yes/no的选项后,选择yes,然后输入B机器的密码,出现下面截图类型的信息,就证明设置成功了,这时可以通过ssh root@192.168.200.128测试下,正常情况下可免密登录到B机器上
A机器传给B机器的秘钥存放在/root/.ssh/目录下,进入到这个目录,可以看到:
完成以上步骤,就可以在A机器上免密码SSH登录B机器了,这时若要互相免密,可在B机器上把以上步骤重复一遍,但B机器ssh-copy-id root@ip的ip则是A机器的了。
以上步骤,可以通过shell脚本来自动化操作互免。
1 #!/bin/bash 2 set -e 3 4 ssh-keygen() { 5 yum -y install expect 6 /usr/bin/expect <<-EOF 7 set timeout 60 8 spawn ssh-keygen 9 expect { 10 "Enter file in which to save the key (/root/.ssh/id_rsa):" { send "\r"; exp_continue} 11 "Overwrite (y/n)?" { send "n\r" } 12 "Enter passphrase (empty for no passphrase):" { send "\r"; exp_continue} 13 "Enter same passphrase again:" { send "\r"} 14 } 15 expect eof 16 EOF 17 echo "" 18 } 19 20 21 ssh-copy(){ 22 /usr/bin/expect <<-EOF 23 set timeout -1 24 spawn ssh-copy-id $1 25 expect { 26 "*yes/no" { send "yes\r"; exp_continue } 27 "*password:" { send "$2\r" } 28 } 29 expect eof 30 EOF 31 } 32 33 34 ssh-keygen 35 ssh-copy "root@192.168.200.128"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!