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]

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

sudo apt install openssh-server

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

sudo service ssh start
sudo service ssh stop
sudo service ssh restart
# ...
2、ssh登录

示例:

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

常用参数:

  • -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>

常用参数:

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

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

ssh-keygen -t rsa -b 4096 -f <key_file_name>

创建完成后会获取一个私钥和对应的公钥,如果未使用-f指定文件名,默认生成到~/.ssh目录下。

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

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

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

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

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

二、xrdp服务

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

1、安装

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

sudo apt install xrdp

在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
# 管理状态
sudo systemctl start xrdp
sudo systemctl stop xrdp
sudo systemctl restart xrdp
# 使能自启动
sudo systemctl enable xrdp

注: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
  • 修改FuseMountName配置项
FuseMountName=thinclient_drives

修改为:

FuseMountName=.xrdp/thinclient_drives

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

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

三、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终端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ftswsfb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值