1、ssh命令介绍
SSH有客户端与服务端,我们将这种模式称为C/S架构,ssh客户端支持 Windows、Linux、Mac 等平台。
在ssh客户端中包含 ssh|slogin 远程登陆、 scp 远程拷贝、 sftp 文件传输、 sshcopy-id 秘钥分发等应用程序。
2、ssh-远程登陆
2.1、作用
2.2、示例
ssh -p22 root@10.0.0.61
# -p 指定连接远程主机端口,默认22端口可省略
# root@remotehost
# "@"前面为用户名,如果用当前用户连接,可以不指定用户
# "@"后面为要连接的服务器的IP
3、scp-远程拷贝
3.1、作用
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