Ubuntu 24.02服务器配置:无需指定用户名的SSH自动登录及分场景行为实现
我完全懂你的需求——现在要让用户只输入ssh mydomain.net就能自动用alpha用户免密登录并启动交互应用,同时指定其他用户名(比如ssh beta@mydomain.net)时还能正常登录对应用户,不会触发强制应用。下面给你两种可行的方案,你可以根据实际情况选择:
方案一:用SSH服务器匹配规则快速实现(适合大多数场景)
这个方案通过修改sshd_config的Match块,让除了指定用户之外的所有登录请求自动切换到alpha用户,操作简单,不需要额外脚本。
编辑SSH服务器配置文件
打开终端,执行命令编辑配置:sudo nano /etc/ssh/sshd_config添加匹配规则到文件末尾
在文件最后添加以下内容(注意Match块必须放在所有普通配置之后):# 规则说明:匹配所有用户,除了root、beta(你可以根据需要添加更多排除用户) # 符合规则的请求会强制切换到alpha用户,并启动你的交互应用 Match User *,!root,!beta User alpha ForceCommand /path/to/your/interactive/application # 禁用密码登录(因为你用的是免密公钥登录,可选但推荐) PasswordAuthentication no如果你希望哪怕客户端本地用户名是beta,输入
ssh mydomain.net也强制转到alpha,那就把!beta从规则里删掉。验证配置并重启SSH服务
先检查配置是否有语法错误:sudo sshd -t如果没有报错,就重启SSH服务生效:
sudo systemctl restart sshd
效果:
- 用户输入
ssh mydomain.net时,客户端会发送本地用户名,服务器匹配到该用户名不在排除列表里,就自动切换到alpha用户,免密登录后启动应用。 - 用户输入
ssh beta@mydomain.net时,服务器匹配到beta用户,会正常登录beta的账户,使用默认shell,不会启动应用。
方案二:用公钥映射实现精准控制(适合复杂场景)
如果你希望不管客户端发送什么用户名,只要公钥属于alpha就自动登录alpha(完全避免客户端本地用户名的干扰),可以用AuthorizedKeysCommand实现公钥到用户的映射。
创建公钥查找脚本
先创建一个脚本文件,用来检查客户端公钥是否属于alpha用户:sudo nano /usr/local/bin/ssh_default_user写入以下内容:
#!/bin/bash # 客户端公钥会作为参数$1传入 ALPHA_AUTH_KEYS="/home/alpha/.ssh/authorized_keys" PUBKEY="$1" # 检查公钥是否在alpha的authorized_keys中 if grep -Fxq "$PUBKEY" "$ALPHA_AUTH_KEYS"; then echo "$PUBKEY" exit 0 fi # 不属于alpha的公钥,返回空让sshd继续尝试其他用户 exit 1给脚本添加执行权限:
sudo chmod +x /usr/local/bin/ssh_default_user修改SSH服务器配置
再次编辑sshd_config:sudo nano /etc/ssh/sshd_config在文件中添加以下内容:
# 启用公钥查找脚本,让sshd先检查公钥是否属于alpha AuthorizedKeysCommand /usr/local/bin/ssh_default_user AuthorizedKeysCommandUser root # 给alpha用户设置强制启动应用的规则 Match User alpha ForceCommand /path/to/your/interactive/application PasswordAuthentication no确保其他用户(比如beta)的
authorized_keys配置正确,这样指定beta登录时就能正常验证。验证配置并重启服务
同样先检查语法:sudo sshd -t重启服务:
sudo systemctl restart sshd
效果:
- 不管用户输入
ssh mydomain.net时客户端发送什么本地用户名,只要公钥在alpha的authorized_keys里,就会自动登录alpha并启动应用。 - 用户输入
ssh beta@mydomain.net时,如果公钥在beta的authorized_keys里,就会正常登录beta账户,不受强制应用的影响。
额外注意事项
- 确保alpha用户的
.ssh目录和authorized_keys文件权限正确:chmod 700 /home/alpha/.ssh chmod 600 /home/alpha/.ssh/authorized_keys - 测试时可以用
ssh -v mydomain.net查看详细连接日志,排查可能的问题。
备注:内容来源于stack exchange,提问作者xnylbn

