服务器教程(三) | 免密登录以及远程工具
唠唠闲话
教程 上篇 内容:
- Ubuntu 和 Windows 系统中,连接远程服务器,执行命令与传输文件的方法
- putty, filezilla, Xshell, Xftp 安装及使用
- 腾讯云服务器网页访问的两种方法:命令行 + 远程桌面
本篇主要内容:
配置说明:
- 远程服务器: Ubuntu 18
- 本地系统: Ubuntu 20.04 以及 Win 10
ssh 免密登录
关于 ssh
SSH 是一种网络协议,用于计算机之间的加密登录,更多介绍参考阮一峰的博客。
公钥登录
使用 ssh <用户名>@<服务器地址>
连接服务器,但每次都必须输入密码,非常麻烦。好在 SSH 还提供了公钥登录,可以省去输入密码的步骤。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
设置方法
-
生成密钥
1
ssh-keygen -t rsa -C "youxiang@qq.com" -f <rsa密钥名称>
-f
参数后接密钥的名称 -
将私钥传送到远程主机,需输入密码
1
ssh-copy-id -i <rsa私钥位置> <用户名>@<主机地址>
-
修改
~/.ssh
目录下的config
,例如1
2
3
4
5Host my.server
HostName <主机地址>
User <用户名-设置随意>
IdentityFile ~/.ssh/<私钥地址>
IdentitiesOnly=yes -
参数说明
Host
可设置为简单易记的字符串,当通过Host
访问时,实际访问的是HostName
对应的参数HostName
是实际访问的地址,比如域名github.com
或 IP 地址- 可设置多段
Host
,使用同一个HostName
- 参数
User
随意,只是方便辨识 IdentityFile
参数是关键,当使用该Host
访问时,使其指定的相应私钥文件- 如果设置过多个密钥,设置参数
IdentitiesOnly
避免失败
-
测试连接
1
ssh <用户名>@<Host>
可能遇到的问题
个人电脑设置了多个 ssh 密钥,使用ssh-copy-id
上传密钥时报错:Too many authentication failures
stack 给了两种解决方案:使用ssh
命令时添加参数-o PubkeyAuthentication=no
;或者用 config 配置密钥时,追加一行IdentitiesOnly=yes
。
远程桌面访问
Windows 端访问
教程参考 CSDN 博客:Windows 远程访问 Ubuntu(Linux) 服务器
-
登录 Ubuntu 服务器,依次执行命令:
1
2
3
4
5sudo apt-get update
sudo apt-get install xrdp -y
sudo apt-get install vnc4server -y
sudo apt-get install xubuntu-desktop -y
sudo service xrdp restart -
安装提示选择 gdm 或 lightdm ,我选的是后者
-
Win+R
调出运行命令,输入mstsc
打开 Windows 自带的远程桌面工具,输入公网地址
-
首次连接显示下边界面
-
连接成功进入登录界面
-
登录如果显示验证密码,点取消即可
-
成功进入的页面如下,点击左侧
Activities
调出侧边栏
注:如果第3步连接提示下边错误
可能是第一步软件没安装好,重新输入
1 | sudo apt-get install xrdp -y |
Ubuntu 端访问
参考 StackExchange 的这个回答。
-
使用
ssh -X
连接服务器1
ssh -X <username>@<Host>
-
命令行启动
xterm
,如果没有需用apt install
安装
-
此时运行软件,将会调用图形界面,比如启动
vscode
1
2
3cd ~/Desktop
touch 1.txt
code 1.txt
远程软件
jupyter-notebook 和 vscode 都支持远程登录,使用尤其方便,所以这节单独介绍。
jupyter-notebook
-
登录远程服务器,并设置
jupyter-notebook
密码,比如1
2ssh zhwang@ai2.ecnu
jupyter-notebook password -
运行
jupyter-notebook
,并设置端口和 IP,比如1
jupyter-notebook --port 6000 --no-browser --ip=0.0.0.0
设置在
6000
端口访问,ip=0.0.0.0
表示允许所有 IP 地址访问
-
如果嫌输入端口和 IP 麻烦,可编写
.sh
文件,或直接修改配置文件1
2
3
4# 生成配置文件
jupyter notebook --generate-config
cd ~/.jupyter/
vi jupyter_notebook_config.py找到下边字段并修改
1
2
3
4
5
6
7
8
9# 设置允许访问的 IP 地址
c.NotebookApp.ip = '0.0.0.0' # 或者 '*'
# 取消弹出浏览器
c.NotebookApp.open_browser = False
# 设置默认打开位置
# 或者用 c.ContentsManager.root_dir,有区别
c.NotebookApp.notebook_dir = '/home/zhwang'
# 设置访问端口
c.NotebookApp.port = 6000 -
本地打开服务器地址,链接末尾追加端口,比如
1
http://mathai2.lflab.cn:6000
vscode
-
搜索并安装插件
remote-ssh
-
此时左侧出现新图标
-
选择相应服务器,点右侧图标连接,弹出新窗口
注:用 vscode 支持拖拽上传文件,使用方便。