1.在远程服务器上创建一个用于ssh连接的用户(ussh不需要登录权限)
adduser ussh
2.登录刚刚创建的用户
su ussh
3.生成ussh的秘钥:
确认秘钥是否已存在:
ls -l ~/.ssh
如果不存在,手动生成(回车三次):
ssh-keygen -t rsa -C "your_email@example.com"
4.把公钥添加到authorized_keys
cat .ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
5.重启ssh服务
service sshd restart(或者/etc/init.d/ssh restart)
6.复制秘钥到客户端服务器,并设置权限(这里使用scp复制,也可以用其他方法)
scp ussh@remote_ip:~/.ssh/id_rsa /usr/share/utbin/rsa
chmod 600 /usr/share/utbin/rsa/id_rsa
7.修改秘钥权限
chmod 600 id_rsa
8.在客户端服务器使用秘钥测试是否可以免密登录(如果不可以,请检查4,5,6步骤,如果可以登录则继续下一步)
ssh -i /usr/share/utbin/rsa/id_rsa ussh@remote_ip
9.出于安全考虑,需要取消远程服务器上的ussh账户的登录权限(root 账号下执行修改)
vi /etc/ssh/sshd_config
增加一行 DenyUsers ussh
重启ssh服务:
service sshd restart(或者/etc/init.d/ssh restart)
10.在客户端服务器新建文件并
vi /lib/systemd/system/autossh-tcp.service
输入以下内容:(关于linux自定义系统服务的说明参考:https://www.jianshu.com/p/57aa4b66999c)
其中第六行为autossh映射指令,指令中10764为进程号,10768为本机80端口所映射远程服务器上的端口,这些映射的端口号需要自己设定,并且需要注意新的端口在远程服务器上是否已被占用,linux查看端口占用的指令netstat -nap | grep port,remote_ip是远程服务器ip
[Unit]
Description=ut-autossh
After=network.target auditd.service
[Service]
TimeoutSec=infinity
ExecStart=/usr/bin/autossh -M 10764 -g -N -R 10768:localhost:80 -o ServerAliveInterval=20 -o ServerAliveCountMax=3 -i /usr/share/utbin/rsa/id_rsa ussh@remote_ip
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=no
RestartPreventExitStatus=255
Type=notify
[Install]
WantedBy=multi-user.target
Alias=autossh.service
11.修改文件权限为664:
chmod 664 /lib/systemd/system/autossh-tcp.service
12.使服务生效(会开机自启动):
systemctl enable autossh-tcp
13.修改后重载服务:
systemctl daemon-reload
14.手动启动服务
systemctl start autossh-tcp
网友评论