ssh远程外网访问Ubuntu电脑(连接无线路由下的服务器)

自己的初衷视为了自己能在学校控制家里的Ubuntu电脑,但发现网上很少有真正介绍怎样从外网访问自己电脑的相关帖,因此本文主要为了不知道如何从外网控制服务器的朋友. 倘若要作为server的Ubuntu电脑未配置过,可以从 1.测试内网连接 部分看起


1. 测试内网连接

1.1配置 server端

在远程的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

1.2配置 client 端

Ubuntu 已经默认有 openssh-client, 即可通过ssh 尝试连接
在client端terminal输入:

ssh -p 端口号 用户名@服务器ip
例: ssh -p 2222 [email protected]

1.3设置 秘钥 登录

秘钥生成

注:如果是在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

2. 测试外网连接

本人的Ubuntu系统"服务器"是一台家用电脑,用小米路由无线连接的,因此使用的方法是为了方便自己在学校使用学校电脑通过外网连接到家里路由,通过路由连接自己的家用电脑
如果不想通过路由器设置的同学可以参考此处连接:
点击: How to Set up SSH Tunneling (Port Forwarding)

2.1 设置ssh配置文件

在server端 更改sshd_config,

sudo vim /etc/ssh/sshd_config

去掉注释并更改:

GatewayPorts yes

2.2查看public ip

方法一 方法二
在server端打开连接 在terminal中输入
https://ifconfig.co/ip curl ifconfig.me

得到 public ip: 65.154.122.154(例子)

2.3设置静态ip

打开路由器设置(192.168.31.1),查找路由器的连接设备,把家用电脑的ip改成静态ip,此处的ip依然是内网的ip,如 192.168.66.1,只不过改成了statistic
ssh远程外网访问Ubuntu电脑(连接无线路由下的服务器)_第1张图片

网上也有很多其他设置静态ip的方法,可以自行查找

2.4设置端口转发/映射

如果不想通过路由器设置,也可以通过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

ssh远程外网访问Ubuntu电脑(连接无线路由下的服务器)_第2张图片

2.4 连接

此时 连接时,应改为 public ip, 65.154.122.154 端口赢改为路由的暴露端口7272
在client 端 输入命令

ssh -p 7272 [email protected]

即可控制相应的内网192.168.66.1 端口号为4444的 Ubuntu server.


希望对你有所帮助,欢迎点赞

你可能感兴趣的:(问题处理,讲解学习,框架环境,ssh,远程访问,公网,服务器,连接外网路由下的服务器)