ssh基本配置
/etc/ssh/sshd_config
|
|
SSH文件权限设置
为了正确配置.ssh目录及其内涵的文件权限,可以按照以下步骤操作:
将.ssh目录的权限设置为700:运行以下命令:chmod 700 ~/.ssh;
将私钥文件的权限设置为600:运行以下命令:chmod 600 ~/.ssh/id_rsa;
将公钥文件的权限设置为644:运行以下命令:chmod 644 ~/.ssh/id_rsa.pub。
这样做的目的是,只允许当前用户读写.ssh目录和私钥文件,而其他用户只能读取公钥文件,从而保证.ssh目录和密钥文件的安全性。
当然,你可以使用如下命令批量化的处理.ssh权限问题:
|
|
SSH 连接失败: no matching host key type found. Their offer: ssh-rs
|
|
这个问题经常出现在ssh 服务端版本和客户端版本不匹配。 要解决问题,需要在命令加上一个选项: -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa 比如:
|
|
如果是sftp连接的话,只需要将ssh换成sftp即可,比如:
|
|
也可以加参数加到 ssh config file, /etc/ssh/ssh_config
|
|
或者追加到~//.ssh/config文件中也是可以的,如:
|
|
另一个选择是在创建密钥对时使用不同的算法。
要查看 Linux 系统上 SSH 命令支持的算法,可以使用 ssh -Q 命令。具体来说,可以使用以下命令来查看支持的加密算法、散列算法和公钥算法:
|
|
ubuntu自动配置sshd_config
操作步骤
|
|
脚本内容-sshd_config.sh
|
|
客户端.ssh目录下config文件基本配置
.ssh/config
|
|
这个配置是一个 SSH 配置文件(通常是 ~/.ssh/config)。在这个配置中,ServerAliveInterval 和 ServerAliveCountMax 是全局参数,会应用到所有的主机连接上,而其他的部分是针对特定主机的配置。
- ServerAliveInterval 设置为 60 秒表示,无论连接的是哪个主机,客户端都会每隔 60 秒发送一个空闲检查以确认服务器是否活动。
- ServerAliveCountMax 设置为 120 表示,无论连接的是哪个主机,客户端都会允许服务器连续未响应 120 次空闲检查,然后才会断开连接。
其他部分(Host、HostName、User、Port、IdentityFile)是用于指定特定主机连接的配置,其中:
- Host 是用于指定主机别名的标识符。
- HostName 是指定主机的域名或 IP 地址。
- User 是指定连接主机时要使用的用户名。
- Port 是指定连接主机时要使用的端口号。
- IdentityFile 是指定用于身份验证的私钥文件路径。
如果你想为特定主机设置这些参数,你可以在 Host 后面指定主机别名,然后在其后设置相应的参数。例如:
|
|
这样的话,上述的 ServerAliveInterval 和 ServerAliveCountMax 参数将只会应用到 example.com 主机的连接上,而其他主机的连接则不受影响。
如何不让ssh连接断开
- 客户端设置可以确保客户端定期向服务器发送空闲检查,以确保服务器仍然活跃。如果服务器在一段时间内没有响应,客户端可以主动断开连接,避免连接僵死。
- 服务端设置可以确保服务器定期向客户端发送空闲检查,以确保客户端仍然活跃。如果客户端在一段时间内没有响应,服务器可以主动断开连接,释放资源并提高安全性。
总结:如果客户端和服务端都设置保活选项,就可以确保连接的双向活跃性和稳定性。这样的设置可以在两个方向上都进行检查,以确保连接始终保持活跃,并及时处理失活的连接。
可以只设置客户端或只设置服务端,这取决于你想要达到的目的,也可以通过同时设置客户端和服务端,可以确保连接的稳定性和可靠性,从而更好地管理连接并提高系统的安全性和稳定性。
只在客户端设置 SSH 保活选项
您可以在 SSH 客户端的配置文件中设置保活选项,以防止连接因为长时间无活动而断开。这通常在客户端的 ~/.ssh/config 文件中设置:
|
|
ServerAliveInterval:指定客户端向服务器发送空闲包的时间间隔(秒)。例如,60 表示每 60 秒发送一次。 ServerAliveCountMax:在没有收到任何服务器响应的情况下,客户端发送保活包的最大次数。120 意味着在没有响应的情况下最多发送 120 次。
- 优点:客户端可以定期向服务器发送空闲检查,以确保服务器仍然活跃。如果服务器在一段时间内没有响应,客户端可以主动断开连接,这有助于防止连接僵死。
- 缺点:如果客户端没有设置超时检测(例如服务器端没有响应客户端的空闲检查),可能导致服务器一直保持连接,造成资源浪费。
只在服务器端设置 SSH 保活选项
同样,您也可以在 SSH 服务器端设置保活选项,来防止客户端连接由于超时而断开。在服务器的 SSH 配置文件 /etc/ssh/sshd_config 中设置:
|
|
ClientAliveInterval:服务器向客户端发送请求的时间间隔(秒),用于检查客户端是否仍然连接。 ClientAliveCountMax:在没有收到客户端响应的情况下,服务器尝试发送请求的最大次数。
|
|
- 优点:服务端可以定期向客户端发送空闲检查,以确保客户端仍然活跃。如果客户端在一段时间内没有响应,服务端可以主动断开连接,这有助于释放资源并提高安全性。
- 缺点:如果服务端没有设置超时检测(例如客户端无法及时响应服务端的空闲检查),可能导致服务端一直保持连接,造成资源浪费。
总结:单独设置客户端或服务端的一个方面可以达到一定的活跃性和稳定性,但是为了最佳效果,建议同时设置客户端和服务端。这可以确保连接在双向上都得到监视和保持活跃,从而更好地管理连接和资源。
ssh连接,如果超过3秒没有连上则断开
要在 SSH 连接时设置超时时间,可以在命令行中直接指定 -o 选项来设置 ConnectTimeout。以下是一个示例:
|
|
在这个命令中,-o ConnectTimeout=3 表示设置连接超时时间为 3 秒。你可以将 user@hostname 替换为实际的用户名和主机名。
这样,在执行以上命令时,如果连接未能在指定的时间内建立,则会自动断开连接。
使用 tmux 或 screen 会话
termux教程:https://ynhugo.github.io/p/tmux%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/
screen教程:https://ynhugo.github.io/p/screen%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/
使用 tmux 或 screen 可以在连接断开后保持您的工作会话。即使 SSH 连接断开,您也可以重新连接到同一个 tmux 或 screen 会话,继续之前的工作。
安装 tmux 或 screen(取决于您的系统)
|
|
开始一个新会话:
|
|
如果连接断开,您可以重新连接:
|
|
查看 ssh 版本
|
|
处理 ssh 版本信息
ssh -V 命令输出的版本信息是直接打印在标准错误输出(stderr)中,而不是标准输出(stdout)。因此需要使用重定向来处理。
以下是一个示例来提取 OpenSSH 的版本号:
|
|
这个命令将会执行 ssh -V 命令,并将标准错误输出(stderr)转发到标准输出(stdout),然后使用 awk 命令提取第一 个字段,即版本号。
对于 OpenSSH 版本信息的输出,它通常类似于 "OpenSSH_x.x" 的格式,通过使用 $1 来提取第一个字段,可以获取到版本号。
判断 ssh 版本
|
|
注意事项
- 长时间保持 SSH 连接可能会有安全风险,特别是在公共或不受信任的网络中。
- 确保您有足够的权限来修改 SSH 配置文件。
- 在修改服务器配置时,谨慎操作,错误的配置可能会导致无法通过 SSH 连接到服务器。
通过上述方法,您可以有效地防止 SSH 连接因为长时间无活动而断开,提高远程工作的连续性和便捷性。
参考链接
ssh公钥登录远程服务器配置
每次通过ssh登陆远程服务器都要输入用户名和密码,很麻烦,比如:
|
|
我们可以通过公钥的方式,无密码登陆远程服务器。
第一步,ssh-keygen命令生成公钥私钥
全过程有三步,第一步是输入公钥私钥的保存路径,第二步和第三步是设置私钥密码和确认密码。
|
|
如果是第一次生成公钥,则直接一路回车确认就行。公钥和私钥会自动生成到/Users/[用户名]/.ssh路径下。默认公钥文件名为id_rsa.pub,私钥文件名为id_rsa。如果不想覆盖之前已有的公钥,那在第一步指定一个保存路径即可。
第二步,使用ssh-copy-id命令将公钥复制到远程服务器
在用户路径下,执行命令:
|
|
注意:
- 如果上一步你自己指定了单独的公钥路径,请在-i后面输入指定的公钥路径
- 这里是将你的公钥同步到远程服务器上你要登录的用户名,所以只会对该用户登录时有效。
本质上,这一步的操作,是将你的公钥追加到服务器/home/[用户名]/.ssh/authorized_keys文件后面。如果你手动复制进去,也可以,但是麻烦哦。
第三步,检查服务端.ssh/的权限
以上配置之后,就可以无需密码直接登陆了,命令:
|
|
如果无效,则需要检查服务器.ssh/文件的权限。如果用户组权限有写权限,则用公钥ssh登录是不生效的。需要去除掉用户组的写权限,使用命令:
|
|
为什么有这个限制呢?其实思考一下就能理解。因为你想通过公钥快捷登录A用户。而实现方式是将自己的公钥追加到A用户目录下的authorized_keys。这种情况下,如果同用户组的B用户,也有对.ssh/路径下的写权限,那么其他人就可以通过登录B用户,修改A用户下的authorized_keys,将自己的公钥追加进去,这样就可以直接用A用户登录了。所以这会出现漏洞。
第四步,配置快捷命令
目前为止,登录还需要输入用户名和ip,依旧比较麻烦。我们可以在本地的.ssh/config文件中,配置快捷登录命令。
将以下格式的信息追加到config文件后面:
|
|
比如:
默认端口为22,termux的端口为8022,下边这个例子是针对termux的,如果非termux的话将8022改成22即可
|
|
之后使用命令:
|
|
就可以直接登录了。