SSH客户端命令ssh、scp、ssh-keygen、ssh-copy-id、expect
1、ssh命令介绍
SSH有客户端与服务端,我们将这种模式称为C/S架构,ssh客户端支持 Windows、Linux、Mac 等平台。 在ssh客户端中包含 ssh|slogin 远程登陆、 scp 远程拷贝、 sftp 文件传输、 sshcopy-id 秘钥分发等应用程序。
2、ssh-远程登陆
2.1、作用
ssh远程登录服务器命令
2.2、示例
ssh -p22 root@10.0.0.61 # -p 指定连接远程主机端口,默认22端口可省略 # root@remotehost # "@"前面为用户名,如果用当前用户连接,可以不指定用户 # "@"后面为要连接的服务器的IP
3、scp-远程拷贝
3.1、作用
scp 复制数据至远程主机命令
3.2、命令参数解析
# -P 指定端口,默认22端口可不写 # -r 表示递归拷贝目录 # -p 表示在拷贝文件前后保持文件或目录属性不变 # -l 限制传输使用带宽(默认kb)
3.3、示例
3.3.1、上传本地/tmp/test推送至远端服务器10.0.0.61的/tmp目录,使用对端的root用户
scp -P22 -rp /tmp/test root@10.0.0.61:/tmp
3.3.2、下载将远程10.0.0.61服务器/tmp/file文件拉取到本地/opt/目录下
scp -P22 -rp root@10.0.0.61:/tmp/file /opt/
3.3.3、限速为8096kb,换算为MB,要除以 8096/8=1024KB=1MB
scp -rp -l 8096 /opt/1.txt root@172.16.1.31:/tmp
3.4、注意事项
1、scp通过ssh协议加密方式进行文件或目录拷贝。 2、scp连接时的用户作为为拷贝文件或目录的权限。 3、scp支持数据推送和拉取,每次都是全量拷贝,效率较低。
4、SSH验证方式
4.1、基于密码验证
知道服务器的IP端口,账号密码,即可通过ssh客户端命令登陆远程主机。 如: ssh -p22 root@10.0.0.61 1、密码太简单容易破解 2、密码太复杂容易忘记
4.2、基于秘钥验证
4.2.1、SSH秘钥认证过程图
默认情况下,通过ssh客户端命令登陆远程服务器,需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。
4.2.2、创建密钥【ssh-keygen】
参数解析 -t # 指定密钥类型 -C # 指定用户邮箱
# 方式一:需要手动确认 ssh-keygen -t rsa -C test@qq.com # 方式二:无需回车,自动应答方式 ssh-keygen -t rsa -C test@qq.com -f ~/.ssh/id_rsa -P ""
4.2.3、推送公钥【ssh-copy-id】
命令示例: ssh-copy-id [-i [identity_file]] [user@]machine 参数解析: ssh-copy-id # 命令 -i # 指定下发公钥的路径 [user@] # 以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥 machine # 下发公钥至那台服务器, 填写远程主机IP地址
#方式1:推送公钥,[将A的公钥写入B的~/.ssh/authorized_keys文件中],需要手动确认 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.4 #方式2:无需交互实现公钥推送
yum install sshpass -y sshpass -proot1234 ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@192.168.10.4 # 登陆测试 ssh -o 'StrictHostKeyChecking=no' 'root@192.168.10.4' ssh root@192.168.10.4
4.2.4、测试连接
ssh root@172.16.1.41 ssh root@172.16.1.41 "hostname -i"
4.3、批量设置免密码登陆shell脚本
yum install expect -y cat <<'CAT_END' > batch_set_no_pwd.sh pwd=root for i in 17 18 do /usr/bin/expect <<EOF set timeout 30 spawn ssh-copy-id -f root@192.168.10.$i expect { "yes/no" { send "yes\n"; exp_continue } "password:" { send "${pwd}\n"; exp_continue } } EOF done CAT_END