为什么要配置免密:
- 用脚本实现日常工作的自动化。
- 增强 Linux 服务器的安全性。
- 可以比别人提前30分钟下班😄
一、SSH免密登录
- 本地生成公钥和私钥
ssh-keygen -t rsa -C "youname"
- 配置本地公钥到服务器
将~/.ssh/id_rsa.pub添加到服务器的~/.ssh/authorized_keys文件中(没有就创建一个)。
注意.ssh文件夹和authorized_keys文件的权限.
chmod 700 -R .ssh
chmod 600 authorized_keys
二、expect脚本登录
刚入职现在的公司时,已经有Mac配置免密的文档,但是Windows电脑无法使用该文档进行配置,但是我这个人不想一直输入密码(说白就是爱折腾),于是在网络上一波搜索之后发现了expect命令(Expect是一个用来处理交互的命令),最后花了一点时间写成了脚本自己使用,后续使用到自动上传、下载文件到服务器以及推荐给同事使用😤。下面是一个简单的登录脚本,如果自己公司要通过跳板机才能登录服务器的话,对该脚本进行简单的改造即可使用,希望可以帮到大家。
- 脚本内容
#!/usr/bin/expect
##################
#### expect.sh ####
##################
#设置需要的参数
set username "name"
set passwd "pwd"
set ip [lindex $argv 0]
#登录服务器
spawn ssh -l $username $ip
expect {
# 第一次登录服务器会有这个提示
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
# 一直与服务器保持连接
interact
- 执行命令
expect expect.sh ip
三、sshpass脚本登录
sshpass 是一个简单、轻量级的命令行工具,通过它我们能够向命令提示符本身提供密码(非交互式密码验证)。
注意:使用 sshpass 是最不安全的,建议使用ssh免密登录生产环境
1、sshpass安装方式
- brew安装
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
- 编译安装
git clone https://github.com/jiaxionglee/sshpass.git
cd sshpass
./configure
make && make install
2、登录命令
# 从文件中读取密码
sshpass -f pwd_office ssh -o "StrictHostKeyChecking no" name@ip
# 直接输入密码,不安全
sshpass -p pwd ssh -o "StrictHostKeyChecking no" name@ip
说明:-o "StrictHostKeyChecking no"用来解决第一次登录服务器时的提示Are you sure you want to continue connecting (yes/no)?