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

Posted

技术标签:

【中文标题】如何使用命令行将我的 ssh 公钥添加到 Mikrotik 路由器设备?【英文标题】:How can I add my ssh public key to a Mikrotik router device using the command line? 【发布时间】:2021-10-21 01:37:53 【问题描述】:

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

是否有等效的方法来授权 Mikrotik RouterOS 设备上的密钥,这样我就不必输入密码,而是使用密钥或解锁密钥和 ssh-agent 自动登录?

【问题讨论】:

请将您的问题移至Super User(在此处删除,在此处重新发布)。这是off-topic here。 这已经在谷歌上显示为第 5 次点击。超级用户不会显示在任何搜索结果下。我也认为这属于“程序员常用的软件工具”。 IE。 ssh,以及越来越多的基于 Linux 的 Mikrotik 路由器,并且比我所在地区的任何其他设备都更常见。 但这不是“一个......软件开发独有的问题 我想不出除了在软件开发领域之外的任何地方,您都想这样做,尤其是在开发网络管理系统时。当然,它在配置和代码之间的模糊边界上......但它更多的是软件,而不是说软件是纯粹的数学......但我不希望每个人都同意我的观点。然而,我坚持,因为我相信我“没有错”。 【参考方案1】:

Mikrotik RouterOS 仅允许您从复制的文件中导入密钥 - 但您可以从命令行创建此文件。这是一个适用于任何 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 将您的私钥缓存在主机上,如果它受密码保护 - 强烈推荐 - 否则任何拥有副本的人都可以访问您所有允许您的密钥的路由器。

加速初始连接

另一个针对 ssh 的一般可用性提示 - 如果您将以下内容添加到 /etc/ssh/ssh_config ,则连接将保持打开状态 - 并可重复使用 - 这会大大加快您在经常登录的设备上的登录速度:

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

唯一的障碍是,如果连接超时,如果您在该超时内重新连接,连接将挂起。当然也可以手动删除socket,可以通过find .ssh/sock*找到

【讨论】:

以上是关于如何使用命令行将我的 ssh 公钥添加到 Mikrotik 路由器设备?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用命令行将“其他链接器标志”添加到 xcode 项目?

使用Windows命令行将多行环境变量回显到文本文件

如何使用 VLC 或 FFMPEG 命令行将外部音轨添加到视频文件

Simulink - 通过 MATLAB 命令行将 While 迭代器模块添加到子系统

添加github ssh 公钥

如何生成SSH key