Linux 远程登录:SSH 的使用
有时需要在公司操作家里的电脑,或者登录 Linux VPS、App Engine 或云主机, 就需要用到 Linux 下的远程登录工具:SSH。 与 Adobe 远程桌面、QQ 远程控制、微软的 mstsc (RDP 协议)不同之处在于: SSH 是一个加密的远程登录协议,结合一个 字符终端 就可以做到与本地 Shell 完全相同的操作体验。
本文介绍如何 SSH 的基本概念,如何配置使用,以及如何转发远程桌面(X11)。
SSH 基本概念
SSH 是一个 Linux 命令,通常由 openssh
软件包提供。
相比 Telnet, rlogin 等远程登录软件,SSH 通过公私密钥对提供安全的数据交换。
同样采用这一机制来加密的还有 SSL 协议,
比如 HTTPS 协议 就是指运行在 SSL 协议之上的 HTTP。
服务器启动 sshd
服务,监听 22
端口;客户端用 ssh
命令连接到服务器。协议的整个交互大致如下:
- 服务器
sshd
启动时,生成密钥对,存放于/etc/ssh/ssh_host_*
; - 客户端
ssh
发出请求连线请求; - 服务器发送服务器的公钥给客户端;
- 客户端验证该公钥(通过公共密钥基础设施,现在还未普及,因此这时常常无法验证该公钥是否可靠,接受这个 warning 就可以);
- 客户端随机计算并发送自己的公钥给服务器;
- 采用这两对密钥开始加密的通信。
公私钥加密 又称 非对称加密 ,有很多可选的加密算法,常用的 RSA 算法是基于大数分解。每个通信方拥有自己的一对密钥(公钥和私钥),顾名思义公钥都是公开的用于加密,而私钥是保密的用于解密。
例如,Bob 给 Alice 发的数据要用 Alice 的公钥进行加密,此密文只有 Alice 的私钥能解。公开密钥加密的关键便是公钥验证(避免公钥伪造),即公钥基础设施的建立。
# 连接到121.40.72.111,采用用户名harttle
ssh harttle@121.40.72.111
# 连接到121.40.72.111,采用当前的local用户名
ssh 121.40.72.111
# 连接并启用X11转发
ssh -X user@host
# 启用trusted X11转发,当上述命令有错误时可尝试
ssh -Y user@host
文件共享,可以用 secure cp 来拷贝文件:
scp something.local user@host:/to/your/path
也可以直接把磁盘挂载过去
# 服务器设置共享路径
# file: /etc/export
/home/dir 192.168.20.203(rw,no_root_squash,async)
# 在客户端挂载该共享路径
mount 192.168.20.111:/home/dir /home/dir
什么是 X11?
X11(X Window System Version 11) 是 Linux 中的窗口系统,包括 X server 和 X client 通过 socket 进行通信。 GNOME, KDE 等桌面系统都是基于 X11 协议工作的。 1984 年由 MIT 开发,现在由 xorg 基金会 接管。
由于 X11 是基于 Socket 的网络协议,只要我们在 SSH 上把 X Server 的 TCP 端口转发到本地的 X Client 端口, 就实现了 Linux 远程桌面。X11 的设计是不是很酷!
X Window 相关术语
下面是一些与 X11 相关的术语,很常见的:
- X server 管理硬件、屏幕绘制和字体。接管着鼠标、键盘和屏幕,给各种各样的终端提供服务。
- X client 负责处理 X server 的事件处理。及时处理图形事件并通知 X server 进行绘图。
- X Window Manager 用来管理其他的 X client,进行统一的绘图,这样才能提供统一的桌面系统。否则各 client 间会互相干扰。
- X Display Manager 用来提供图形登录控制,一般在 tty7。常见的有 gdm,kdm 等。
X Window 相关命令
startx
用来启动 X,该脚本会调用 xinit
分别启动 X server 和 X client,它们的配置文件分别位于:
~/.xserverrc, /etc/X11/xinit/xserverrc
~/.xinitrc, /etc/X11/xinit/xinitrc
在远程时,往往希望将远程主机的图形界面显示在本地,也就是实现远程桌面。这时需要在本地打开 X server 的访问控制。
# 将远程主机添加到X server访问控制列表
xhost + 17.200.10.5
# 打开X server访问控制
xhost +
# 将远程主机从X server访问控制列表删除
xhost - 17.200.10.5
# 关闭X server访问控制
xhost -
然后,命令远程服务器将窗口显示在某个 X client(本地)上。
setenv DISPLAY 128.100.2.16:0.0
如何配置 SSH
对 SSH 进行设置,可以方便地完成自动登录、X11 转发、保持在线等功能。
在服务器的配置文件(/etc/ssh/sshd_config
)中加入以下设置:
AllowTcpForwarding yes
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
在客户端的配置文件(/etc/ssh/ssh_config 或 ~/.ssh/config
)中加入如下设置:
Host bit
Hostname 121.40.72.111
ServerAliveInterval 120
User harttle
ForwardX11 yes
# 如果有大量的 GUI 绘制
ForwardX11Trusted yes
昨晚上述配置并启动本地的 X11 Client 就可以登录服务器啦:
ssh yangjvn@126.com # 回车,并按照提示输入密码
除了用户密码的登录方式之外,SSH 还支持密钥登录,也就是让服务器直接用公钥来识别登录者。 这种情况不需要每次登录输入密码(俗称 SSH 信任关系),配置过程可参考这篇文章: 配置 SSH 自动登录
加速登录
当需要登录多个 shell 时,让同一主机的所有会话使用同一个连接来避免重复登录。
Host examplehost.com
ControlMaster auto
ControlPersist yes
ControlPath ~/.ssh/socket-%r@%h:%p
为了提高速度,可以采用数据压缩、指定 ipv4 以避免 ipv6 查找:
Compression yes
AddressFamily inet
在线保持
在客户端可以定时发送信号,以保持在线:
ServerAliveInterval 120
相反地,也可以在服务器设定客户端在线间隔:
ClientAliveInterval 120
本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2014/09/08/ssh.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。