• Linux工具-远程登录/访问


    测试环境:ubuntu 20.04

    一、ssh服务

    SSH(Secure Shell Protocol,安全的壳程序协议,基于tcp协议默认使用22端口),它可以通过数据包加密技术将待传输的数据包加密后再传输到网络上。通过ssh协议/服务,我们可以访问登录到远程服务器。

    1、安装

    ubuntu环境下,默认已安装ssh工具,可以使用"ssh"命令查看。

    developer@ubuntu:~$ ssh
    usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
               [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
               [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
               [-i identity_file] [-J [user@]host[:port]] [-L address]
               [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
               [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
               [-w local_tun[:remote_tun]] destination [command]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果未安装ssh服务可以使用apt源进行安装。

    sudo apt install openssh-server
    
    • 1

    ssh server的状态可以使用service命令进行管理。

    sudo service ssh start
    sudo service ssh stop
    sudo service ssh restart
    # ...
    
    • 1
    • 2
    • 3
    • 4
    2、ssh登录

    示例:

    # 登录到远程主机
    ssh <user_name>@<host_name/ip>
    # 在远程主机执行特定命令
    ssh <user_name>@<host_name/ip> ""
    
    • 1
    • 2
    • 3
    • 4

    常用参数:

    • -p: 指定端口,默认为22端口
    • -o StrictHostKeyChecking=no: 连接远程主机时,忽略公钥检查(yes/no确认,自动化脚本使用ssh时通常增加该选项)。
    3、scp文件传输

    示例:

    # 将本地文件cp到远程设备
    scp <local_file> <user_name>@<host_name/ip>:<remote_path>
    # 将远端文件cp到本地
    scp <user_name>@<host_name/ip>:<remote_file> <local_path>
    
    • 1
    • 2
    • 3
    • 4

    常用参数:

    • -P: 指定端口,默认为22端口(注意大小写:ssh为小写,scp为大写
    4、免密登录(密钥登录)

    相对于密码登录,密钥登录使用非对称加密算法保证了系统的安全性。
    使用密钥登录的首先需要在主机创建密钥对(已有密钥对可以忽略该步骤)。

    ssh-keygen
    
    • 1

    创建完成后会获取一个私钥和对应的公钥,一般位于家目录.ssh目录下。

    root@dev:~$ ls ~/.ssh
    id_rsa  id_rsa.pub
    
    • 1
    • 2

    私钥一定要妥善保管,公钥需要传输到服务器用于免密登录。

    # 传输公钥到服务器(在主机操作)
    scp id_rsa.pub <user>@<hostname>:~
    
    • 1
    • 2
    # 将公钥写入认证key文件(在服务端操作)
    cat id_rsa.pub >> ~/.ssh/authorized_keys
    
    • 1
    • 2

    写入成功后,再次使用ssh登录会自动登录成功。

    注:如果使用的密钥对不是系统默认的密钥对,可以ssh登录时使用-i参数指定使用的私钥。例如:ssh -i ./ssh/id_rsa @

    二、xrdp服务

    基于ssh,我们可以借助各类终端软件对远程主机进行访问,但当涉及到使用UI界面的工具/软件时需要使用远程桌面进行访问。
    xrdp 是一个微软远程桌面协议(RDP)的开源实现,通过xrdp可以登录远程机器,并且创建一个真实的桌面会话,通过客户端软件设置可以像使用本地机器一样的访问远程主机。
    借助ubuntu xrdp服务和windows 远程桌面连接客户端,就可以实现在windows环境下访问远程ubuntu桌面。

    1、安装

    ubuntu环境下,默认未安装xrdp工具,我们可以使用apt源进行安装。

    sudo apt install xrdp
    
    • 1

    在ubuntu环境下,使用systemd管理xrdp服务,安装完成后我们可以使用systemd查看或管理xrdp服务状态。

    developer@ubuntu:~$ sudo systemctl status xrdp
    ● xrdp.service - xrdp daemon
         Loaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled)
         Active: active (running) since Thu 2023-10-12 10:00:07 CST; 3min 35s ago
           Docs: man:xrdp(8)
                 man:xrdp.ini(5)
       Main PID: 4604 (xrdp)
          Tasks: 1 (limit: 9387)
         Memory: 756.0K
         CGroup: /system.slice/xrdp.service
                 └─4604 /usr/sbin/xrdp
    
    Oct 12 10:00:06 ubuntu xrdp[4603]: (4603)(139830378088256)[INFO ] address [0.0.0.0] port [3389] mode 1
    Oct 12 10:00:06 ubuntu xrdp[4603]: (4603)(139830378088256)[INFO ] listening to port 3389 on 0.0.0.0
    Oct 12 10:00:06 ubuntu xrdp[4603]: (4603)(139830378088256)[INFO ] xrdp_listen_pp done
    Oct 12 10:00:06 ubuntu xrdp[4603]: (4603)(139830378088256)[DEBUG] Closed socket 7 (AF_INET6 :: port 3389)
    Oct 12 10:00:06 ubuntu systemd[1]: xrdp.service: Can't open PID file /run/xrdp/xrdp.pid (yet?) after start: Operation not permitted
    Oct 12 10:00:07 ubuntu systemd[1]: Started xrdp daemon.
    Oct 12 10:00:08 ubuntu xrdp[4604]: (4604)(139830378088256)[INFO ] starting xrdp with pid 4604
    Oct 12 10:00:08 ubuntu xrdp[4604]: (4604)(139830378088256)[INFO ] address [0.0.0.0] port [3389] mode 1
    Oct 12 10:00:08 ubuntu xrdp[4604]: (4604)(139830378088256)[INFO ] listening to port 3389 on 0.0.0.0
    Oct 12 10:00:08 ubuntu xrdp[4604]: (4604)(139830378088256)[INFO ] xrdp_listen_pp done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    # 管理状态
    sudo systemctl start xrdp
    sudo systemctl stop xrdp
    sudo systemctl restart xrdp
    # 使能自启动
    sudo systemctl enable xrdp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注:xrdp服务默认使用系统的3389端口。

    2、连接

    这里我们使用windows自动的“远程桌面连接”访问xrdp服务。

    • 输入主机名/ip(端口非3389时需加端口号),点击连接
      在这里插入图片描述
    • 输入远程主机的用户名和密码,点击OK
      在这里插入图片描述
    • 连接成功后可以看到ubuntu桌面
      在这里插入图片描述
      注1:当用户在远程主机使用桌面登录,可以连接但会始终黑屏,需要将远程主机的桌面登录用户登出(Logout)或者重启远程主机后重新连接。
      注2:现在看到的远程桌面(Xorg)和使用本地登录使用的桌面(GNOME)存在些差异,可以修改配置进行调整。
    3、优化
    移除/隐藏"~/thinclient_drives"文件夹
    • 打开sesman.ini配置文件:
    sudo vim /etc/xrdp/sesman.ini
    
    • 1
    • 修改FuseMountName配置项
    FuseMountName=thinclient_drives
    
    • 1

    修改为:

    FuseMountName=.xrdp/thinclient_drives
    
    • 1

    并创建~/.xrdp目录(可选,没有该目录不会创建thinclient_drives文件夹)

    mkdir ~/.xrdp
    
    • 1
    • 移除现有"thinclient_drives"目录
    sudo umount thinclient_drives
    sudo rm -rf thinclient_drives
    
    • 1
    • 2
    • 重启xrdp服务(或直接重启远程主机)
    sudo systemctl restart xrdp
    
    • 1
    修改桌面环境
    • 打开~/.xsessionrc文件
    vim ~/.xsessionrc
    
    • 1
    • 增加以下环境变量声明:
    export GNOME_SHELL_SESSION_MODE=ubuntu
    export XDG_CURRENT_DESKTOP=ubuntu:GNOME
    export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
    
    • 1
    • 2
    • 3
    • 重启xrdp服务(或直接重启远程主机)
    sudo systemctl restart xrdp
    
    • 1
    • 配置生效后远程连接后的桌面如下:
      在这里插入图片描述
    优化桌面卡顿
    • 调整xrdp配置参数
      默认配置为32768(32k),且被注释了。放开注释后可调整的为4194304(4M)和6291456(6M)。
    sudo vim /etc/xrdp/xrdp.ini
    
    • 1
    tcp_send_buffer_bytes=4194304
    tcp_recv_buffer_bytes=6291456
    
    • 1
    • 2
    • 重启xrdp服务(或直接重启远程主机)
    sudo systemctl restart xrdp
    
    • 1

    三、vscode开发环境

    基于ssh服务,我们可以访问登录到远程主机,但当涉及到大量文件修改、编码实现时还是有很多不方便的;xrdp可以直接访问桌面,但受限于网络速度通常存在桌面UI刷新卡顿的情况。
    vscode提供了远程开发的功能,对不涉及UI界面的编程开发,我们可以借助于vsode将性能更强大的远程主机作为日常的开发环境。

    1、安装ssh插件

    在vscode的扩展中查找ssh插件,并安装
    在这里插入图片描述
    安装完成后会增加远程连接的侧边栏:
    在这里插入图片描述

    2、添加远程主机

    点击”+“(New Remote) 添加新的远程连接:
    在这里插入图片描述
    输入用户名、主机名/IP、端口(可选)进行连接:
    在这里插入图片描述
    注:vscode的远程连接基于ssh服务,建立”New Remote“时使用的就是ssh访问命令。
    刷新后在ssh下面可以对应的主机名/IP:
    在这里插入图片描述

    3、连接远程主机

    使用图标或右键,选择“Connect in Current Window…”或“Connect in New Window…”连接远程主机,根据弹窗选择远程主机系统、用户密码:
    在这里插入图片描述
    在这里插入图片描述

    连接成功后左下角可以看到主机名/IP:
    在这里插入图片描述
    连接成功后,再选择“Open File”或“Open Folder”,我们可以看到访问到的就是远程主机上的文件目录:
    在这里插入图片描述
    后续就可以像在本地使用vscode一样的操作,存在的差异就是此时创建、编译的文件均存储在远程主机上面,使用终端时打开的也是远程主机的shell终端。

  • 相关阅读:
    Java项目_在线点餐系统(jsp+sevlet+mysql)(含论文)
    java校验字符串只包含数字
    信息学奥赛总结01
    MySQL中BETWEEN AND(范围查询)
    【补充知识】生成模型(generative model)和判别模型(discriminative model)、贝叶斯学派和概率学派
    JNI入门
    科研项目一般流程介绍
    全量知识系统 程序详细设计 库模式的存储库模型: “三生”(派生衍生自生) (Q&A SmartChat)
    【PAT乙】2022秋季赛后总结
    SwiftUI Swift 多个 sheet
  • 原文地址:https://blog.csdn.net/ftswsfb/article/details/132567666