ssh + sshpass 自动输入密码登录服务器
由于经常需要登录一些远程的服务器,每次都需要将密码重输一遍,如下:
格式: #ssh 用户名@服务器IP
示例: #ssh mimvp@123.57.78.100
mimvp@123.57.78.100's password: (这里需要手动输入密码后回车)
想偷懒,不手动输入密码,怎么办?
方法一、密钥验证
密钥验证安全许多,配置也简单,支持ssh、scp、sftp等登录都免去了输入密码的麻烦,推荐使用。
1. 在本地电脑上,生成密匙
# cd ~/.ssh/
# ssh-keygen -t rsa
// 一路回车在当前用户的根目录下的.ssh目录生成id_rsa.pub公钥
本地电脑上,生成了公钥和私钥
-rw------- 1 homer homer 1679 Nov 16 11:48 id_rsa
-rw-r--r-- 1 homer homer 394 Nov 16 11:48 id_rsa.pub
2. 将本地电脑上的公钥,拷贝到远程服务器上,让远程服务器知道本地电脑(类似于在远程服务器上设置了本地电脑的白名单ip)
# scp ~/.ssh/id_rsa.pub mimvp@123.57.78.100:~/.ssh/authorized_keys
// 将本地生成的公钥拷贝到远程服务器的下并改名为authorized_keys
说明:本地电脑上的id_rsa.pub (公钥)文件会存放在远程服务器上的 authorized_keys 文件中。
ssh默认目录为~/.ssh/,配置文件在 /etc/ssh/ssh_config
这样就大功告成了!
ssh 免密登录命令
# ssh mimvp@123.57.78.100 // 不用再手动输入密码
# ssh mimvp@123.57.78.100 /bin/ls -l /tmp/data // 不用再手动输入密码,登录后执行命令,查看远程服务器上的目录文件
通过ssh登录、通过scp或者sftp传输文件,不用再输入密码了!
方法二、sshpass 免密登录
ssh 登陆不能在命令行中指定密码,因为 sshpass 出现了,解决了这一问题。
sshpass用于非交互SSH的密码验证,一般用在shell脚本中,无须再次输入密码(本机known_hosts文件中有的主机才能生效)。
sshpass 允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。
sshpass 安装
# sudo apt-get install sshpass // Ubuntu
# yum -y install sshpass // Linux (CentOS)
MacOS 手动下载安装:
1)方式1:https://sourceforge.net/projects/sshpass/files/ 或 github
2)方式2:百度网盘下载:sshpass-1.06.tar.gz (提取码: r7vm)
MacOS 手动安装命令:
tar -zxvf sshpass-1.06.tar.gz cd sshpass-1.06 ./configure make && make install
或者
# tar xf sshpass-1.06.tar.gz # cd sshpass-1.06 # ./configure --prefix=/usr/local/ # make && make install # cp /usr/local/bin/sshpass /usr/bin/
安装完成后使用sshpass允许你用 -p 参数指定明文密码,然后直接登录远程服务器。
sshpass 命令使用
格式: # sshpass -p '密码' ssh 用户名@服务器IP -p 端口号 -q -o StrictHostKeyChecking=no
示例: # sshpass -p '123456' ssh mimvp@123.57.78.100 -p 22 -q -o StrictHostKeyChecking=no
注:若不指定用户,默认为本机使用的用户;若不指定端口,默认为22端口
sshpass -p 指定密码,后面跟上标准的 ssh 连接命令,ssh -p 指定端口号,默认为22
StrictHostKeyChecking 也可以通过修改ssh配置文件:
1)修改 /etc/ssh/ssh_config文件
vim /etc/ssh/ssh_config
# StrictHostKeyChecking ask
改为
StrictHostKeyChecking no
2)修改 /etc/ssh/ssh_config文件
# GSSAPIAuthentication no
打开注释,修改为
GSSAPIAuthentication no
3)重启 sshd
service sshd restart 或 systemctl restart sshd.service
sshpass 帮助:
$ sshpass --help sshpass: illegal option -- - Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters -f filename Take password to use from file -d number Use number as file descriptor for getting password -p password Provide password as argument (security unwise) -e Password is passed as env-var "SSHPASS" With no parameters - password will be taken from stdin -P prompt Which string should sshpass search for to detect a password prompt -v Be verbose about what you're doing -h Show help (this screen) -V Print version information At most one of -f, -d, -p or -e should be used
sshpass 示例
1)直接输入密码登录
sshpass -p 'password' ssh user@192.168.0.1 -p 22
2)以密码文件登录,
passwd.txt 保存密码,例如
vim passwd.txt 先写入密码 'password'
sshpass -f passwd.txt ssh user@192.168.0.1 -p 22
3)从环境变量中获取密码登录
先提前设置环境变量
export SSHPASS='password' # 可在 /etc/profile 文件里配置,source /etc/profile 使其生效
sshpass -e ssh user@192.168.0.1-p 22
4)执行命令(-f和-e使用同上)
sshpass -p 'password' ssh user@192.168.0.1 -p 22 "ls /home"
5)文件复制(-f 文件密码,-e 变量密码,使用方式同上)
复制远程服务器文件到本地
sshpass -p 'password' scp -r user@192.168.0.1:/home/mimvp-blog.txt /home/
复制本地文件到远程服务器
sshpass -p 'password' scp -r /home/mimvp-blog.txt user@192.168.0.1:/home/
说明:scp是全量拷贝并覆盖,若增量拷贝请使用rsync
6)忽略交互连接远程主机执行命令
sshpass -p 'password' ssh -q -o StrictHostKeyChecking=no user@192.168.0.1 -p 23456 '/bin/ls /tmp'
说明:在远程主机上执行命令后就退出远程主机。当需要在很多主机上执行一条相同命令时需要这个参数
参考推荐:
Linux 修改默认端口、增加普通用户、使用密钥等安全登录SSH
Linux shell 脚本通过expect实现自动输入密码
Linux之/etc/profile、~/.bash_profile等几个文件的执行过程
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2019-11-20 16:40:33
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!