如何使用命令行将我的 ssh 公钥添加到 Mikrotik 路由器设备?

如何使用命令行将我的 ssh 公钥添加到 Mikrotik 路由器设备?

Mikrotik 不支持在几乎所有 Linux 设备上将ssh-copy-id文件复制~/.ssh/id_rsa.pub.ssh/authorized_keys主机。

是否有在 Mikrotik RouterOS 设备上授权密钥的等效方法?

答案1

Mikrotik 只允许您从复制过来的文件中导入密钥 - 但您可以从命令行创建此文件。有一个单行命令应该适用于任何 Linux 主机。

 ssh 192.168.88.1 "/file print file=mykey; file set mykey contents=\"`cat ~/.ssh/id_rsa.pub`\";/user ssh-keys import public-key-file=mykey.txt;/ip ssh set always-allow-password-login=yes"

这就是你所需要做的全部。

解释

上述内容的逐行版本:

 $ ssh user@router
 [user@router] > /file print file=mykey;
 [user@router] > /file set mykey contents="copy and paste contents of ~/.ssh/id_rsa.pub here";
 [user@router] > /user ssh-keys import public-key-file=mykey.txt
 [user@router] > /ip ssh set always-allow-password-login=yes

这将允许您简单地访问ssh路由器而无需输入密码。请注意,如果您的私钥受密码保护,您将被提示输入私钥文件密码,但该密码不会发送到路由器。您可以使用ssh-agentssh-add在主机上缓存您的私钥(如果它受密码保护 - 强烈建议这样做) - 否则任何拥有副本的人都可以访问所有允许使用您的密钥的路由器。请注意,RouterOS 会自动添加扩展.txt

加速初始连接

另一个通用的可用性技巧是ssh- 如果您添加以下内容,/etc/ssh/ssh_config则连接将保持打开状态 - 并重复使用 - 这大大加快了您经常登录的设备上登录的速度:

 ControlMaster auto
 ControlPath ~/.ssh/socket-%r@%h-%p
 ControlPersist 600

唯一的问题是,如果连接超时,在超时时间内重新连接将挂起。当然,您可以手动删除套接字,您可以使用find .ssh/sock*

使用 SCP/SFTP/FTP

还有另一种方法 - 尽管它需要额外的步骤,所以它不是一个“一行”解决方案 - 那就是在运行导入命令之前手动复制密钥文件。

scp ~/.ssh/id_rsa.pub 192.168.88.1:/
ssh 192.168.88.1 "/user ssh-keys import public-key-file=id_rsa.pub; /ip ssh set always-allow-password-login=yes"

请注意,这:/非常重要,没有它文件就不会被保存——就像很多 Mikrotik 东西一样,不会产生错误条件——而且这种方法也.txt不会生成扩展。这里还有一个与文件名相关的潜在竞争条件——以及更多问题,所以如果你有一个庞大的工程师团队——或者不止一个密钥管理员……以下可能是更好的解决方案:

scp ~/.ssh/id_rsa.pub 192.168.88.1:/`whoami`.pub
ssh 192.168.88.1 "/user ssh-keys import public-key-file=`whoami`.pub; /ip ssh set always-allow-password-login=yes"

或者

 (h=192.168.88.1; u=`whoami`; k="`cat ~/.ssh/id_rsa.pub`"; ssh $u@$h "/file print file=$u; file set $u contents=\"$k\";/user ssh-keys import public-key-file=$u.txt;/ip ssh set always-allow-password-login=yes;:set \$f [/file find name=$u.txt]; :if (\$f)  do={:put \"Duplicate key\"; [/file remove \$f]} else={:put \"Key added\"}")

import 命令会删除文件 - 除非已经存在密钥,否则文件会保留,需要手动删除。最后一个命令也会执行此操作。如果您的路由器用户名与本地用户名不同,请将其更改为u='whoami'u=admin任何其他名称。如果您在文件中指定了不同的登录用户名ssh_config,则只需删除命令$u@后的部分即可ssh

相关内容