唠唠闲话

教程 上篇 内容:

  • Ubuntu 和 Windows 系统中,连接远程服务器,执行命令与传输文件的方法
  • putty, filezilla, Xshell, Xftp 安装及使用
  • 腾讯云服务器网页访问的两种方法:命令行 + 远程桌面

本篇主要内容:

配置说明:

  • 远程服务器: Ubuntu 18
  • 本地系统: Ubuntu 20.04 以及 Win 10

ssh 免密登录

关于 ssh

SSH 是一种网络协议,用于计算机之间的加密登录,更多介绍参考阮一峰的博客

公钥登录

使用 ssh <用户名>@<服务器地址> 连接服务器,但每次都必须输入密码,非常麻烦。好在 SSH 还提供了公钥登录,可以省去输入密码的步骤。

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

设置方法

  1. 生成密钥

    1
    ssh-keygen -t rsa -C "youxiang@qq.com" -f <rsa密钥名称>

    -f 参数后接密钥的名称

  2. 私钥传送到远程主机,需输入密码

    1
    ssh-copy-id -i <rsa私钥位置> <用户名>@<主机地址>
  3. 修改 ~/.ssh 目录下的 config,例如

    1
    2
    3
    4
    5
    Host my.server
    HostName <主机地址>
    User <用户名-设置随意>
    IdentityFile ~/.ssh/<私钥地址>
    IdentitiesOnly=yes
  4. 参数说明

    • Host 可设置为简单易记的字符串,当通过 Host 访问时,实际访问的是 HostName 对应的参数
    • HostName 是实际访问的地址,比如域名 github.com 或 IP 地址
    • 可设置多段 Host,使用同一个 HostName
    • 参数 User 随意,只是方便辨识
    • IdentityFile 参数是关键,当使用该 Host 访问时,使其指定的相应私钥文件
    • 如果设置过多个密钥,设置参数 IdentitiesOnly 避免失败
  5. 测试连接

    1
    ssh <用户名>@<Host>

可能遇到的问题
个人电脑设置了多个 ssh 密钥,使用 ssh-copy-id 上传密钥时报错: Too many authentication failures
深度截图_选择区域_20211114130918
stack 给了两种解决方案:使用 ssh 命令时添加参数 -o PubkeyAuthentication=no;或者用 config 配置密钥时,追加一行 IdentitiesOnly=yes

远程桌面访问

Windows 端访问

教程参考 CSDN 博客:Windows 远程访问 Ubuntu(Linux) 服务器

  1. 登录 Ubuntu 服务器,依次执行命令:

    1
    2
    3
    4
    5
    sudo 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
  2. 安装提示选择 gdm 或 lightdm ,我选的是后者
    20211203105833

  3. Win+R 调出运行命令,输入 mstsc 打开 Windows 自带的远程桌面工具,输入公网地址
    20211203110009

  4. 首次连接显示下边界面
    20211203111232

  5. 连接成功进入登录界面
    20211203111529

  6. 登录如果显示验证密码,点取消即可
    20211203112925

  7. 成功进入的页面如下,点击左侧 Activities 调出侧边栏
    20211203113051

注:如果第3步连接提示下边错误
20211203111300
可能是第一步软件没安装好,重新输入

1
2
sudo apt-get install xrdp -y
sudo service xrdp restart

Ubuntu 端访问

参考 StackExchange 的这个回答

  1. 使用 ssh -X 连接服务器

    1
    ssh -X <username>@<Host>
  2. 命令行启动 xterm,如果没有需用 apt install 安装
    深度截图_选择区域_20211204093604

  3. 此时运行软件,将会调用图形界面,比如启动 vscode

    1
    2
    3
    cd ~/Desktop
    touch 1.txt
    code 1.txt

    20211204093915

远程软件

jupyter-notebook 和 vscode 都支持远程登录,使用尤其方便,所以这节单独介绍。

jupyter-notebook

  1. 登录远程服务器,并设置 jupyter-notebook 密码,比如

    1
    2
    ssh zhwang@ai2.ecnu
    jupyter-notebook password

    20211208114243

  2. 运行 jupyter-notebook,并设置端口和 IP,比如

    1
    jupyter-notebook --port 6000 --no-browser --ip=0.0.0.0

    设置在 6000 端口访问,ip=0.0.0.0 表示允许所有 IP 地址访问
    深度截图_选择区域_20211210155533

  3. 如果嫌输入端口和 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
  4. 本地打开服务器地址,链接末尾追加端口,比如

    1
    http://mathai2.lflab.cn:6000

    20211208113727

vscode

  1. 搜索并安装插件 remote-ssh
    深度截图_选择区域_20211208114643

  2. 此时左侧出现新图标
    深度截图_选择区域_20211208114843

  3. 选择相应服务器,点右侧图标连接,弹出新窗口
    20211208115048

注:用 vscode 支持拖拽上传文件,使用方便。