openssh常用配置

环境

服务端:Ubuntu 18.04.6 LTS(OpenSSH_7.6p1 Ubuntu-4ubuntu0.6, OpenSSL 1.0.2n)

常用配置

ssh server配置一般位于/etc/ssh/sshd_config,里面有很多配置项,配置项的解释可以使用man sshd详细查看。 ssh client本用户下的配置一般位于~/.ssh/config,常用配置参考后面介绍。

超时设置

不管使用iterm2或者Terminal等模拟终端时,常常会遇到过一会ssh client要不是卡住就是broken pipe类似的问题导致无法使用。这个主要是由于ssh使用tcp协议,长时间不使用后,导致超时断开。可以通过配置tcp probe解决,分为服务端配置和客户端配置,一般可以在client配置设置中加入:

shell 复制代码
ServerAliveInterval 30 
ServerAliveCountMax 10

上面的配置可以解释为:

vbscript 复制代码
The client will wait idle for 60 seconds (ServerAliveInterval time) and, send a "no-op null
packet" to the server and expect a response. If no response comes, then it will keep trying 
the above process till 10 (ServerAliveCountMax) times (600 seconds). If the server still
doesn't respond, then the client disconnects the ssh connection

上图中每隔30s客户端发送keep alive的探针保活,在数据库中一般也有类似的设置,比如postgresql中可以配置tcp_keepalives_interval等配置项。

Host Alias

client配置直接使用alias连接 可以使用类似别名来定义登录的ip和port,在客户端配置文件中设置,比如:

bash 复制代码
Host dev     
    HostName 10.122.48.222     
    IdentityFile /home/username/.ssh/id_rsa     
    User username     
    LogLevel INFO     
    Compression yes     
    ServerAliveInterval 30     
    ServerAliveCountMax 10

配置后就可以直接使用ssh dev登录,如果想看整个登录的交互过程,可以使用ssh -v dev,包括登录失败时一些有用信息。

公钥绵密登录

如上所示使用了IdentityFile的配置,登录分为公钥登录和密码登录,密码登录不说了,公钥登录就是说首先要将客户端的公钥放到Server的authorized_keys里面,登录的时候就会使用非对称密钥形式校验。Server配置里面可以选择使用登录方式(PasswordAuthenticationPubkeyAuthentication)。SSH提供了ssh-copy-id命令操作以上过程:

typescript 复制代码
shell ssh-copy-id -i ~/.ssh/id_rsa.pub username@ip 

这样就能使用上一步中的命令免密登录了。有时候即使我们设置了上述的配置,操作后还是要使用密码登录,会有很多原因导致,我们需要拿到日志信息分析,客户端可以添加Verbose参数(-v),服务端可以查看SSH的日志信息,我的机器位于/var/log/auth.log(需要提升权限访问),使用sshd关键字查询(/sshd)。我遇到过的问题原因是服务端的用户目录权限变更了,修改完(755)后免密登录成功。

X11 forwarding

有时候我们使用Windows上面默认ssh命令连接host(假设ubuntu桌面版,重要是使用X server)后,想使用剪贴板,比如xclip等工具,会发现报错:

bash 复制代码
shell echo "hello" | xclip -i -sel clipboard # Error: Can't open display: (null) 

原因是因为Windows上没有X server。客户端和服务端均需要配置:

  1. 首先是客户端windows下载使用vcxsrv 模拟 X server,安装后运行,然后在powershell中运行:
shell 复制代码
PS> $env:DISPLAY = "localhost:0" # 保证X server可以使用网络socket连接 
PS> ssh -X -Y username@ip 
  1. ssh服务端需要允许X11 forwarding,具体修改/etc/ssh/sshd_config文件里面的如下配置再重启sshd服务
bash 复制代码
Host * 
    X11Forwarding yes 

现在就可以使用剪贴板了,另外vcxsrc还可以和windows上的WSL配合。

Tmux

使用ssh登陆后,如果有运行时间长的编译或者重要任务时,如果中途网络断了或者ssh客户端意外关闭,那前面的任务状态就未知了,有可能出现意想不到的结果。比如在Ubuntu中更新时意外断开了,那有可能再次登入更新时,会报错说lock住了。这个很有可能是意外断开导致更新进程来不及释放前面更新使用的锁。可以使用ssh加上tmux组合解决,因为tmux是服务端额外开的服务,即使ssh断开,tmux server还是在服务端运行,下次再次attach上就行,可以避免出现上述的问题了。修改配置~/.ssh/config,在Host下添加

arduino 复制代码
Host * 
    RequestTTY yes 
    RemoteCommand tmux new-session -A 

注意RequestTTY yes一定要加上。

打洞

shell 复制代码
# NOTICE: 使用中发现Cmder无法使用常规的Ctrl-C关闭,直接关闭cmder进程,ssh还会驻留一段时间`
ssh -v -C -f -N -g -D 29999 -p 8989 username@ip_addr`
# -v: verbose`
# -C: compress`
# -f: fork it to a background command`
# -N: not execute remote command, just for forwarding ports`
# -g: allows remote hosts to connect to local forwarded ports`
# -D: Specifies a local "dynamic" application-level port forwarding.`
# -p server port, default 22`

上述命令会将在本地监听29999,将29999收到的流量转发到ssh server端,实现流量转发。

相关推荐
qinyia11 小时前
Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
服务器·人工智能·ssh
JCGKS18 小时前
Docker|“ssh: connect to host xxx.xxx.xxx.xxx port 8000: Connection refused“问题解决
docker·ssh·端口·listen·tcp三次握手
fengfuyao98519 小时前
诊断并修复SSH连接Github时遇到的“connection closed“错误
运维·ssh·github
高旭的旭19 小时前
Gitlab 配置自定义 clone 地址
svn·ssh·gitlab·code
小猫挖掘机(绝版)1 天前
通过tailscale实现一台电脑上vscode通过ssh连接另一台电脑上的VMware Linux 虚拟机
linux·windows·vscode·ubuntu·ssh
方先森有点懒1 天前
CentOS 7.2 虚机 ssh 登录报错在重启后无法进入系统
linux·运维·centos·ssh
喜欢你,还有大家1 天前
SSH服务远程安全登录
运维·安全·ssh
qinyia1 天前
解锁服务器网络配置新姿势:Wisdom SSH 助力之旅
服务器·网络·ssh
三无少女指南2 天前
WSL2环境下因服务器重装引发的SSH连接问题排查记录
运维·服务器·ssh
久绊A2 天前
指定端口-SSH连接的目标(告别 22 端口暴力破解)
linux·网络·ssh