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

 

posted @ 2023-05-10 22:36  小粉优化大师  阅读(506)  评论(0编辑  收藏  举报