自己的初衷视为了自己能在学校控制家里的Ubuntu电脑,但发现网上很少有真正介绍怎样从外网访问自己电脑的相关帖,因此本文主要为了不知道如何从外网控制服务器的朋友. 倘若要作为server的Ubuntu电脑未配置过,可以从 1.测试内网连接 部分看起
在远程的Ubuntu电脑上安装ssh-server
sudo apt update
sudo apt install openssh-server
一旦安装完成,其实ssh服务就会自动启动,想要检测是否运行可以在terminal中输入
检测方法一:
sudo systemctl status ssh
则会显示 active (running)
检测方法 二:
ps -e | grep ssh
sshd 说明启动了 ssh server, ssh-agent 说明启动了 ssh-agent,
未启动可以通过一下命令启动
启动方法1 | 启动方法2 |
---|---|
sudo /etc/init.d/ssh start | sudo service ssh start |
Ubuntu 已经默认有 openssh-client, 即可通过ssh 尝试连接
在client端terminal输入:
ssh -p 端口号 用户名@服务器ip
例: ssh -p 2222 [email protected]
注:如果是在client端生成密钥对,则把client端的公钥拷贝到server端,如果是在server端生成密钥对,则把私钥拷贝到client端.
在server端terminal 生成密钥对ww 与ww.pub(名称任意,默认为id_rsa,id_rsa.pub)
ssh-keygen
当出现 ‘Enter file in which to save the key (/home/user/.ssh/id_rsa): ww’ 时,可以输入想要更改的秘钥名称ww即可
cd .ssh
将公钥内容存入authorized_keys文件中
cat ww.pub >> authorized_keys
把server端的 私钥ww 拷贝到client端:
在client端的terminal输入:
scp [email protected]:~/.ssh/ww ~/.ssh/
注意是在client端的terminal, 并且如果需要明确端口号的话, 可以通过scp -P 端口号 [email protected]:~/.ssh/ww ~/.ssh/ 来完成
更改server端文件权限
chmod 600 authorized_keys
chmod 700 ~/.ssh
更改client端文件权限
chmod 400 ~/.ssh/ww
当出现类似Permissions 0644 for ‘id_rsa’ are too open.
It is required that your private key files are NOT accessible by others 等错误时,就是有可能没有把私钥的权限改成只读, 就可以用chmod 400 ~/.ssh/私钥 来解决
在server端更改配置文件:
打开编辑器:
sudo gedit /etc/ssh/sshd_config 或者 sudo vim /etc/ssh/sshd_config
去掉注释并更改:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
重启服务
service sshd restart
在client 端登录时加载秘钥即可:
ssh -i ~/.ssh/秘钥 -p 端口 [email protected]
在确保可以连接成功时,可以选择是否通过更改server端的sshd_config 来关闭密码登录
PasswordAuthentication no
本人的Ubuntu系统"服务器"是一台家用电脑,用小米路由无线连接的,因此使用的方法是为了方便自己在学校使用学校电脑通过外网连接到家里路由,通过路由连接自己的家用电脑
如果不想通过路由器设置的同学可以参考此处连接:
点击: How to Set up SSH Tunneling (Port Forwarding)
在server端 更改sshd_config,
sudo vim /etc/ssh/sshd_config
去掉注释并更改:
GatewayPorts yes
方法一 | 方法二 |
---|---|
在server端打开连接 | 在terminal中输入 |
https://ifconfig.co/ip |
curl ifconfig.me |
得到 public ip: 65.154.122.154(例子)
打开路由器设置(192.168.31.1),查找路由器的连接设备,把家用电脑的ip改成静态ip,此处的ip依然是内网的ip,如 192.168.66.1,只不过改成了statistic
网上也有很多其他设置静态ip的方法,可以自行查找
如果不想通过路由器设置,也可以通过terminal设定,详情查看: How to Set up SSH Tunneling (Port Forwarding)
设置映射的外部端口,如 7272, 内部端口应与sshd_config中的端口保持一致,如果在sshd_config中,port的端口为,内部ip地址应与Ubuntu电脑server的内网静态地址保持一直
port 4444
那么在设置时,端口转发的内部接口则应该设置为 4444
例:
名称 | 协议 | 外部端口 | 内部IP地址 | 内部端口 |
---|---|---|---|---|
任意名如:ww | TCP | 7272 | 192.168.66.1 | 4444 |
此时 连接时,应改为 public ip, 65.154.122.154 端口赢改为路由的暴露端口7272
在client 端 输入命令
ssh -p 7272 [email protected]
即可控制相应的内网192.168.66.1 端口号为4444的 Ubuntu server.
希望对你有所帮助,欢迎点赞