引子

近日海淘了一个 mini-PC:Gigabyte GB-BSRE-1605,此设备虽采用 amd 嵌入式低功耗处理器,性能相比现在自己所用的设备却有不小提升,加上先前升级电脑多余一些 ssd 和 ram,于是组了一个个人服务器,装上最新的 ubuntu 20.04 server 后,打算以后作为远程开发的基础主机。现记录一些开发环境配置过程,供参考。

设备无需连接显示器及键盘鼠标等输入设备,第一步,开启远程 ssh 登录。

原理

从客户端来看,ssh 提供两种级别的安全验证:

  1. 基于口令的验证:只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。以下是登录验证流程:



    当第一次链接远程主机时,会提示你当前主机的”公钥指纹”,询问你是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/.ssh/known_hosts文件中。
  2. 基于密钥的验证:这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。

条件

ssh 免登录实现的原理为 ssh 的公钥与私钥配对,此时无需输入登录密码进行认证。假设要从电脑 a 通过 ssh 免密码登录服务器 b,前提条件为:

  1. 服务器 b 需要运行 ssh 服务端程序,并且最好是作为开机自启动服务

  2. 电脑 a 可以运行 ssh 客户端程序,电脑 a 生成了 ssh 的公钥和私钥

  3. 服务器 b 欲登录用户存储了电脑 a 的公钥

步骤

下面分别说明如何实现上面的条件,以及一些注意事项。

  1. 如果服务器为 linux 或者 mac,一般都会自带 ssh 服务端,以 ubuntu 20.04 server 系统为例:





    并且默认开机启动

  2. 电脑如果为 linux 或者 Mac,一般也会自带 ssh 客户端,如果是 windows,可能要单独安装。ssh 公钥和私钥需要通过 ssh-keygen 工具生成,生成 ssh 公私钥的命令一般为 ssh-keygen -t rsa,也可以从其他地方拷贝后放到对应的目录,一般为 ~/.ssh 目录下。
  3. 通过 ssh-copy-id 工具将电脑 a 生成的 ssh 公钥传输到服务器 b,命令格式一般为 ssh-copy-id -i ~/.ssh/id_rsa.pub UserName@RemoteServer,其中 UserName 为服务器 b 的用户名,RemoteServer 为服务器 b 的 ip 或者域名。操作成功后,会将电脑 a 的 ssh 公钥追加到服务器 b 的用户 UserName 用户目录的 .ssh/authorized_keys 文件中
  4. 完成以上操作后,就可以在电脑 a 上通过 ssh 命令免密码登录服务器 b 了,命令格式一般为 ssh UserName@RemoteServer,也可以直接简写为 ssh RemoteServer

其他说明

ssh 免密登陆除了极少数情况下需要自己安装 sshd 服务端程序并配置 ssh_config 以外,经常遇到的问题其实是权限问题。

权限问题:

  1. 传输 ssh 公钥如果遇到一些权限报错,需要将个人主目录下 .ssh 目录及其目录下的文件设置为相应的权限:远程机器的 .ssh 目录需要 700 权限,authorized_keys 文件需要 600 权限

  2. 要正常进行 ssh 免密码登录,客户端机器下 .ssh 目录及其目录下的文件权限为:.ssh 目录需要 700 权限,id_rsa 文件需要 600 权限,其他文件为 644 权限

最后,ssh 免密登录如果需要管理的 ssh 目标主机太多,并且 ip 不是很好记忆,或者有多套 ssh 公私钥,可以通过 ssh config 实现通过别名快速登陆,通过 config 还可以实现流量转发等高级功能,实现远程服务本地调用,后面再详述。

参考资料:

  1. https://superuser.com/questions/215504/permissions-on-private-key-in-ssh-folder
  2. https://gist.github.com/grenade/6318301
  3. https://www.shellhacks.com/ssh-login-without-password/
  4. https://www.linux.com/training-tutorials/ssh-scp-without-password-remote-host-look-ma-no-password/
  5. https://www.jianshu.com/p/0f9b72d691c2
  6. https://deepzz.com/post/how-to-setup-ssh-config.html

ssh 免登录配置的更多相关文章

  1. Linux SSH免登录配置总结(转)

    转载请出自出处:http://eksliang.iteye.com/blog/2187265 一.原理 我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器Serv ...

  2. Linux远程登录ssh免密码配置方法(仅供参考)

    这篇文章主要介绍了linux远程登录ssh免密码配置方法,需要的朋友可以参考下(http://www.0834-3659999.com) 一.情景 公司刚上几台Linux,现在要把主机之间都能远程ss ...

  3. Linux实验:ssh免密码配置

    [实验目的]    1)了解ssh工具的作用    2)熟悉ssh配置过程    3)理解ssh原理[实验原理]    SSH是目前比较可靠的专为远程登录会话和其他网络服务提供安全的协议.不同主机之间 ...

  4. Firefly安装ROS及ssh远程登录配置

    一.在Linux firefly 3.10.0 上安装ROS-indigo 快捷键 CTRL + ALT  + T 打开终端并安装ROS-indigo sudo sh -c 'echo "d ...

  5. 【mac】ssh免登录密码

    mac ssh免登录密码 在mac或者Linux上需要使用ssh登服务器,每次都需要输密码感觉很麻烦,搜了一下找到一个脚本,实践后发现可行. 1.创建脚本xx.sh $ vim xx.sh 输入: # ...

  6. LINUX的ssh免密码配置

    本篇将介绍LINUX的ssh免密码配置. 本篇中的有三台主机: 192.168.1.110 master.com.cn  主机192.168.1.111 salver1.com.cn192.168.1 ...

  7. centos 6.5 配置ssh免登录

    生成密匙: ssh-keygen -t rsa 会生成 id_rsa  id_rsa.pub id_rsa:私匙 id_rsa.pub:公匙 配置当前机器免登录: cp id_rsa.pub auth ...

  8. CentOS6.9下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数

    密钥登录步骤(免密码登录)ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,出于安全方面的考虑,介绍密钥认证方式登录到linux/unix的方 ...

  9. Debian9.5下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数

    密钥登录步骤(免密码登录)ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,出于安全方面的考虑,介绍密钥认证方式登录到linux/unix的方 ...

随机推荐

  1. Linux bash script regex auto replace

    Linux bash script regex auto replace 自动替换 /assets/css/0.styles.96df394b.css => ./assets/css/0.sty ...

  2. Linux bash fi

    Linux bash fi if..else..fi allows to make choice based on the success or failure of a command. if..e ...

  3. macOS & pbcopy

    macOS & pbcopy copy from command line pbcopy $ whoami | pbcopy # xgqfrms-mbp $ echo "hello, ...

  4. after upgrade macOS Catalina bugs

    after upgrade macOS Catalina bugs 升级了macOS catalina后,碰到的 bugs? macOS 10.15.5 https://www.apple.com/m ...

  5. HTTP cache in depth

    HTTP cache in depth HTTP 缓存 https://developers.google.com/web/fundamentals/performance/optimizing-co ...

  6. 为什么说USDN是一种应用型稳定币?

    USDN是由NGK Global出品的一种新型稳定币系统,里面是涵盖了包括货币供需.Bancor.抵押借贷等在内的一整套算法.该稳定币构想一经提出,便在社区引发了不小的热度. 官方对于USDN的定位是 ...

  7. NGK Baccarat流动性挖矿打造DeFi新风口

    2020年,DEFI成为了区块链领域最热门的概念之一.它就像乐高积木,将原来的金融模块,以不同的智能合约来实现.智能合约又以全新的方式将不同的金融功能拼接在一起,以创造出全新的金融产品. NGK.IO ...

  8. Nginx之Location匹配规则

    概述 经过多年发展,nginx凭借其优异的性能征服了互联网界,成为了各个互联网公司架构设计中不可获取的要素.Nginx是一门大学问,但是对于Web开发者来说,最重要的是需要能捋的清楚Nginx的请求路 ...

  9. js中this指向的问题与联系

    前言 JavaScript 中最大的一个安全问题,也是最令人困惑的一个问题,就是在某些情况下this的值是如何确定的.有js基础的同学面对这个问题基本可以想到:this的指向和函数调用的方式相关.这当 ...

  10. linux系统导出随笔

    导出时,不要用root用户忽略某张表的命令(多张表则直接往后加即可) --ignore-table=firewall_8088.operate_history --ignore-table=firew ...