客户端:ssh
SSH不指定用户,默认使用root账号
存放基于key验证的公钥:~/.ssh/authorized_keys
存放连接过的主机和密钥:~/.ssh/known_hosts
客户端配置文件:/etc/ssh/ssh_config
StrictHostKeyChecking no 首次登录不显示检查提示
服务器端:sshd
日志文件:/var/log/secure
配置文件:/etc/ssh/sshd_config
常用参数:
Port 端口号
ListenAddress ip 设置只能访问的ip地址
LoginGraceTime 2m 限制用户必须在指定的时限内认证成功
PermitRootLogin yes 是否允许 root 登录
StrictModes yes 检查.ssh/文件的所有者,权限等
MaxAuthTries 6 指定每个连接最大允许的认证次数
MaxSessions 10 同一个连接最大会话
PubkeyAuthentication yes 是否允许公钥认证
PermitEmptyPasswords no 是否允许密码为空的用户远程登录
PasswordAuthentication yes 是否允许使用基于密码的认证
ClientAliveInterval 60 客户端超时时长
ClientAliveCountMax 3 客户端超时时长次数
UseDNS no 是否应该对远程主机名进行反向解析
Banner 客户端连接时提示信息
AllowUsers user1 user2 白名单
DenyUsers user1 user2 黑名单,优先级高
ssh [user@]IP[`COMMAND`]
[-l user]IP[`COMMAND`]
-p # 指定服务器端口
-b 指定连接的源IP
-v 显示连接过程
-C 压缩方式
-X 支持图形
-t 强制伪tty分配 ssh -t 堡垒机IP ssh 内部机器IP
ssh-keygen -p 重设对称口令
-t 指定密钥类型
-f 指定密钥文件存储文件名
实现基于key验证:
1、客户端生成非对称密钥
ssh-keygen -t rsa
2、复制公钥到服务器端
ssh-copy-id 192.168.30.7
三台主机实现key验证:
A:ssh-keygen -t rsa
ssh-copy-id A
scp -rp /root/.ssh B:/root/
scp -rp /root/.ssh C:/root/
SecureCRT或Xshell实现基于key验证:
在SecureCRT工具--->创建公钥--->生成Identity.pub文件
在Xshell工具--->新建用户生成向导--->生成id_rsa_2048.pub文件
转化为openssl兼容格式(Xshell不需要转化格式),并复制到需要登录主机上相应文件authorized_keys中,注意权限必须要600,
在需要登录的ssh主机上执行:ssh -keygen -i -f Identity.pub >> .ssh/authorized_keys
使用代理程序保存解密后的密钥:
1、启用口令代理
ssh-agent bash
2、钥匙通过命令添加给代理
ssh-add
SSH端口转发(隧道)
||
192.169.10.10(外网主机)------> ||内网[[192.168.10.12(中间服务器)-------192.168.10.11(目标主机)]]
||
本地转发:
ssh -L 外网主机端口(自定义):目标主机IP:目标主机端口 中间服务器IP
选项:
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能
示例:
外网主机使用Telnet连接内网服务器
1、建立隧道
ssh -L 9527:192.168.10.11:23 -N 192.168.10.12
2、使用Telnet连接
telnet 127.0.0.1 9527
远程转发:
ssh -R 中间服务器端口:目标主机IP:目标主机端口 外网主机IP
示例:
通过中间服务器建立外内网桥梁
1、ssh -R 9527:192.168.10.11:23 -N 192.168.10.10
动态转发(翻墙):
当用Firefox访问Internet时,本机的1080端口做为代理服务器,Firefox的访问请求被转发到sshserver上,由sshserver替之访问Internet
ssh -D 1080 root@sshserver
在本机Firefox设置代理socket proxy:127.0.0.1:1080
curl --socks5 127.0.0.1:1080 http://www.google.com
实验1:向多台服务器推送公钥
#/bin/bash
rpm -q expect &> /dev/null || yum install expect -y ### 检查是否安装expect
ssh-keygen -P "" -f "/root/.ssh/id_rsa" ### 创建密钥对
password=centos ### 设置password变量
while read ipaddr;do ### while循环
expect <<EOF
set timeout 10
spawn ssh-copy-id $ipaddr ### 发送公钥到服务器端
expect { ### 捕抓关键字
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
done < ip.txt ### 输入ip文件中的地址