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

相关推荐
muyun280018 小时前
安全访问云端内部应用:用frp的stcp功能解决SSH转发的痛点
运维·安全·ssh·frp
qinyia1 天前
Wisdom SSH:探索AI助手在复杂运维任务中的卓越表现
运维·人工智能·ssh
小Lu的开源日常2 天前
在 macOS 上设置 SSH 和 Git
git·macos·ssh
tao3556672 天前
树莓派免密登录(vs code/cursor)
linux·嵌入式硬件·ssh
杨浦老苏2 天前
IntelliSSH:AI驱动的远程服务器管理软件
人工智能·docker·ai·ssh·群晖
qinyia2 天前
利用Wisdom SSH高效搭建CI/CD工作流
运维·ci/cd·ssh
mmsx3 天前
使用git生成ssh的ed25519密钥
运维·git·ssh
搬码临时工3 天前
内网服务器怎么设置公网远程访问? windows桌面连接和Linux自带SSH外网异地跨网用完整步骤教程
运维·服务器·ssh
輝太くん4 天前
ssh远程服务器
ssh
R.X. NLOS4 天前
VS Code远程开发新方案:使用SFTP扩展解决Remote-SSH连接不稳定问题
运维·服务器·ssh·debug·vs code