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端,实现流量转发。

相关推荐
埃博拉酱7 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
zhangfeng11338 天前
趋动云 如何ssh登录 服务区 项目server
运维·人工智能·ssh
txzz88888 天前
CentOS-Stream-10 Secure Shell服务器
linux·centos·ssh·secure shell·ssh服务器
文静小土豆9 天前
CentOS 7 OpenSSH 10.2p1 升级全攻略(含离线安装与回退方案)
linux·运维·centos·ssh
最最菜的菜鸟9 天前
本地环境通过 SSH 协议访问 GitHub 上的仓库时,SSH 公钥认证失败,配置 Git SSH 密钥
git·ssh·github
ol木子李lo11 天前
Linux 命令备忘录
linux·运维·服务器·windows·编辑器·ssh·bash
m0_7381207211 天前
渗透测试——Momentum靶机渗透提取详细教程(XSS漏洞解密Cookie,SS获取信息,Redis服务利用)
前端·redis·安全·web安全·ssh·php·xss
小哈里13 天前
【工具】Linux远程开发核心工具,Git命令缩写与SSH常用命令
linux·git·ssh·工具·远程开发
推理幻觉13 天前
ssh远程连接错误
运维·ssh
能源革命13 天前
Ubuntu24.04修改ssh默认端口
linux·服务器·ssh