私有云SSH访问¶
SSH密钥¶
为保障服务器安全,现代SSH服务部署应该关闭密码认证登陆,只允许 ssh密钥 认证登陆:
修订服务器/虚拟机(模版)
/etc/ssh/sshd_config
配置:PasswordAuthentication no PermitRootLogin prohibit-password
使用
ssh-keygen
命令生成密钥对:ssh-keygen -t rsa
备注
输入密钥保护密码
将生成的
~/.ssh/id_rsa.pub
公钥复制到服务器~/.ssh/
(对于我而言是/home/huatai/.ssh
目录) 目录下authroized_keys
文件保存,并配置服务器上对应配置文件及目录正确权限:chown -R huatai:wheel ~/.ssh chmod 700 .ssh chmod 600 .ssh/authorized_keys
验证登陆:
ssh huatai@server_ip
确保只使用密钥登陆服务器
为方便和快速登陆服务器,使用
ssh-agent
来确保只需要输入一次密钥保护密码: 修订本地客户端~/.bashrc
添加如下代码:
if [ -f ~/.agent.env ]; then
. ~/.agent.env -s > /dev/null
if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
echo
echo "Stale agent file found. Spawning new agent..."
eval `ssh-agent -s | tee ~/.agent.env`
ssh-add
fi
else
echo "Starting ssh-agent..."
eval `ssh-agent -s | tee ~/.agent.env`
ssh-add
fi
这样,只有第一次打开终端提示输入密钥密码,后续都会缓存在 ssh-agent
中,就不需要重复输入保护密码
穿透访问后端SSH服务器¶
在 私有云KVM环境 构建了不同的开发环境和测试环境虚拟机,例如 z-dev
是用来做开发的虚拟机,其IP地址是内网IP地址 192.168.6.253
。而日常工作,可能不能时时连接内部局域网,需要从外网访问时,为了方便,需要做端口转发,方便直接访问虚拟机的ssh服务(而无需转跳)。此时,比较简单的方法是使用 iptables端口转发(port forwarding) ,而优雅方法是采用 SSH ProxyCommand实现穿透主机访问后端服务器 。
Host *
ServerAliveInterval 60
ControlMaster auto
ControlPath ~/.ssh/%h-%p-%r
ControlPersist yes
StrictHostKeyChecking no
Compression yes
Host z-dev
HostName 192.168.6.253
User huatai
ProxyCommand ssh -W %h:%p 10.10.1.200
LocalForward 9000 127.0.0.1:9000
LocalForward 8080 127.0.0.1:8080
LocalForward 8888 127.0.0.1:8888
上述配置中启用了
ProxyCommand
可以通过转跳中间SSH服务器(10.10.1.200
),直接访问后端内网SSH服务器192.168.6.253
(z-dev
) ,结合前文ssh-agent
方便运维。上述配置中还启用了 ssh多路传输multiplexing加速 加速SSH访问,以及启用了SSH的压缩功能(降低网络带宽占用)