You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无可用Shell的SSH账户添加公钥实现免密登录的方法

无可用Shell的SSH账户添加公钥实现免密登录的方法

这个场景我之前碰到过!因为登录后直接启动游戏,根本没有常规shell可用,常规的ssh-copy-id和scp都会因为终端环境问题或者无法启动shell而失败,不过我们可以利用SSH的命令执行模式绕过默认的登录程序(那个游戏),直接在远程执行添加公钥的操作。

下面是具体的实现方法:

方法一:管道传输公钥并执行配置命令(推荐,不用手动复制公钥)

直接把本地公钥的内容通过管道传给远程,同时执行创建目录、写入公钥、设置权限的命令:

cat ~/.ssh/id_ed25519.game.pub | ssh -T guest@game.example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

执行的时候会提示你输入guest账户的密码,输入后就能自动完成配置。

方法二:手动复制公钥内容执行命令

如果管道方式有问题,也可以手动复制公钥内容:

  1. 先在本地查看并复制你的公钥完整内容:
cat ~/.ssh/id_ed25519.game.pub

把输出的整行内容(比如ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILxxxxxx user@home)完整复制下来。

  1. 执行下面的命令,把<你的公钥内容>替换成刚才复制的字符串:
ssh -T guest@game.example.com "mkdir -p ~/.ssh && echo '<你的公钥内容>' >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

同样输入密码后完成配置。

关键细节解释

  • -T参数:禁用伪终端分配,因为远程登录后没有可用的终端环境,加上这个参数可以避免出现Error opening terminal: unknown的错误。
  • mkdir -p ~/.ssh:确保.ssh目录存在,不存在就创建,存在的话不会报错。
  • 权限设置:~/.ssh必须设为700(只有所有者能读写执行),authorized_keys设为600(只有所有者能读写),这是SSH密钥认证的硬性要求,权限不对会导致密钥无法被识别。
  • 命令执行优先级:SSH连接时指定的命令会替代远程默认的登录程序(也就是那个终端游戏)运行,所以我们能绕过游戏直接执行配置命令。

验证是否成功

配置完成后,试试用密钥登录:

ssh -i ~/.ssh/id_ed25519.game guest@game.example.com

如果能直接进入游戏,不需要输入密码,就说明免密登录配置成功啦!

备注:内容来源于stack exchange,提问作者MestreLion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:12:42