文档章节

SSH 与 SSH-Key

傅易
 傅易
发布于 2016/10/31 23:09
字数 839
阅读 112
收藏 7
SSH

ssh 提供两种级别的安全认证:

  1. 基于口令的安全认证
  2. 基于证书的安全认证

基于口令的安全认证

知道用户名和密码即可登录。连接是加密的,但客户端不能确认目标主机是否为“伪造的”,也不能保证口令安全。

开启口令认证需要在远程主机的配置文件 /etc/ssh/sshd_config 添加:

PasswordAuthentication yes

重启 sshd 使改动生效:

$ /etc/init.d/sshd reload

基于证书的安全认证

这需要用户持有“公钥/私钥对”证书。具体是用户在远程主机存有公钥,本地持有私钥和公钥。

客户端向服务器发出请求。服务器收到请求之后,在用户的主目录下找到该用户的公钥(公钥存放在远程主机的 ~/.ssh/authorized_keys 中,一行一条),对比用户发送过来的公钥。如果一致,服务器用公钥加密“质询”并发送给客户端。客户端收到“质询”后用私钥解密,再发还给服务器。认证结束。

需要生成密钥,使用 ssh-keygen,选加密算法(rsa、dsa),给秘钥命名(可选):

$ ssh-keygen -t rsa -C "name"

然后会提示你输入 passphrase,即私钥密码。这可以加强安全性,避免证书被恶意复制。

完成后,会在 ~.ssh 下生成 id_rsa, id_rsa.pub 两个文件,分别是 私钥/公钥。

公钥需复制一份到远程服务器 ~/.ssh/authorized_keys 文件里。

要保证 ~/.ssh/authorized_keys 都只有用户自己有写权限。否则验证无效。

$ chmod -R 700 ~/.ssh/
$ chmod 600 ~/.ssh/authorized_keys

sshd_config 配置实践

$ vim /etc/ssh/sshd_config

# 是否允许root账户远程登录,为了安全可关闭
PermitRootLogin no

# 是否检查用户的文件系统权限,避免因目录、文件的权限配置错误可能引起信息泄露
StrictModes no

# 是否允许使用证书登录,授权文件路径
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

# 是否允许使用口令登录,为了安全可关闭
PasswordAuthentication no

使用 SSH-Agent 缓存保存密钥口令

默认会在每次使用私钥时请求该口令,你也可以将其加入本地密码库:

$ ssh-add ~/.ssh/id_rsa

这样在本机使用就不会每次输入密码了,减弱了安全性,但增加了便利。

持有多个证书时的使用方法

简单情况下,通过手动指定私钥文件登录

$ ssh -i ~/.ssh/my_id_rsa username@hostname

觉得麻烦可以配置客户端的 /etc/ssh/ssh_config

# 其实默认 id_rsa 已经加入私钥路径了,这里只是示范
IdentityFile ~/.ssh/id_rsa
# 如果有其他的私钥,再加入其他私钥的路径
IdentityFile ~/.ssh/my_id_rsa

你也可以使用 SSH Agent,下面以使用 GitHub 为场景简单介绍。

# 创建证书
$ ssh-keygen -t rsa -C 'second@mail.com'
# 将证书加入 SSH Agent 缓存
$ ssh-add ~/.ssh/id_rsa_second

创建 ~/.ssh/config

# default github user(first@mail.com)
Host github.com
HostName github.com
User git
IdentityFile C:/Users/username/.ssh/id_rsa

# second user(second@mail.com)
Host github-second
HostName github.com
User git
IdentityFile C:/Users/username/.ssh/id_rsa_second

配置完成后,在连接非默认账号的仓库时,远端地址要修改为:

git remote add test git@github-second:second/test.git
# 原来是 git@github.com:second/test.git
# git 根据配置的 user.email 来获取 github 帐号来显示 author 信息,记得将 user.email 改为相应的 email 如例中的 second@mail.com。

© 著作权归作者所有

共有 人打赏支持
傅易
粉丝 28
博文 110
码字总数 69025
作品 0
海淀
后端工程师
私信 提问
git 在mac上使用git clone时每次需要输入密码的解决方案

Generating a new SSH key and adding it to the ssh-agent MAC WINDOWS LINUX After you've checked for existing SSH keys, you can generate a new SSH key to use for authentication, t......

张宏亮1982
05/13
0
0
Generating SSH keys

Generating SSH keys MAC WINDOWS LINUX ALL SSH keys are a way to identify trusted computers, without involving passwords. The steps below will walk you through generating an SSH ......

冰珊孤雪
2015/09/06
69
0
could not load host key: /etc/ssh/ssh_host_rsa_...

#ssh-keygen -t dsa -f /etc/ssh/sshhostdsa_key Generating public/private dsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identificatio......

mj4738
2012/06/22
0
0
linux 配置ssh互信

原文地址:http://blog.chinaunix.net/uid-16979052-id-3568036.html linux配置ssh互信 公钥认证的基本思想: 对信息的加密和解密采用不同的key,这对key分别称作private key和public key,其...

flash_fish
2014/02/26
0
0
利用Dockerfile文件创建带有sshd服务的centos镜像

1、安装docker并启动docker,不在赘述 2、创建使用Dockerfile安装sshd服务的目录,名字路径自定义 mkdir sshd_centos cd sshd_centos 3、编辑启动sshd服务的脚本文件 vim run.sh内容为 #!/b...

射手Mr吴
2016/07/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

对接比特币钱包的PHP开发包

BtcTool是一个基于第三方服务和离线裸交易实现的PHP比特币应用开发包,适合不希望部署本地 节点旳PHP开发者,开发包主要包含以下特性: 利用第三方服务获取指定地址的utxo集合 离线生成消费裸...

汇智网教程
27分钟前
1
0
【自用】 VHD to VHDX

VHDX: 在VHD 2TB 的基础上提供 64TB的容量。 支持逻辑扇区大小为 4KB,和每块的大小为 256MB,来优化虚拟磁盘性能。 比VHD提供更高的安全性、可靠性和性能。 convert-VHD –path d:\Hyper-v...

Tensor丨思悟
39分钟前
1
0
30 岁转行做Python开发晚吗?而且是零基础

最近有小伙伴问小编,30 岁转行做Python开发晚吗? 小编想说,其实无论男女,只要想学,有这个动力,就直接去行动。无论年龄,无论性别,只要你想一直勇往直前,那么想做的就去做吧~这里有一...

糖宝lsh
50分钟前
11
0
详解Spring中的Profile

前言 由于在项目中使用Maven打包部署的时候,经常由于配置参数过多(比如Nginx服务器的信息、ZooKeeper的信息、数据库连接、Redis服务器地址等),导致实际现网的配置参数与测试服务器参数混淆...

watermelon11
今天
5
0
phper必知必会(二)

  1.说说你对进程,线程以及协程的理解      进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础。进程是程序基本执行的实体。进程与进程之间是独立的,拥有完全独立...

SEOwhywhy
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部