ssh使用详解

概述

简单来说,ssh是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用ssh协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

需要指出的是,ssh只有一种协议,存在多种实现,既有商业实现,也有开源实现。

SSH之所以安全是采用了公钥加密的方式,通过客户自己签发公钥加密用户密码,再通过主机持有的私钥解密;不像HTTPS 协议存在证书管理中心CA用于验证公钥的合法性,因此,存在被中间人劫持的风险,即劫持登录请求发送篡改的公钥来截获用户登录密码,俗称”中间人攻击“;

不过SSH存在一套自有的验证方式:口令验证及密钥验证,可有效避免大部分的攻击;

  • 口令验证

    用户通过自己的账号及口令登录远程主机,所有传输的数据都是加密的,但不能保证登录请求不被劫持,即”中间人攻击“;

  • 密钥验证

    需要将用户的公钥放在远程服务器上,登录请求时会携带公钥信息,服务端会比对公钥信息是否一致来判定合法性,因此不存在”中间人攻击“问题,安全性要高;

基本使用

登录

  • ssh user@host

    指定登录远端主机的用户名

  • ssh host

    如果本机用户名和需要登录的远端用户名一致,可省略用户名

  • ssh -p port -i ~/.ssh/id_rsa user@host

    -p指定目的端口,默认为22,可通过修改配置文件/etc/ssh/ssh_config来修改该默认端口;-i指定私钥文件;

测试

$ ssh -vT user@host

使用上述命令测试连接性及验证流程;

公钥

通过ssh-keygen工具生成本地公钥文件,常用命令如下:

# -t 指定加密的方式,如rsa dsa ecdsa,默认rsa
# -f 指定生成目标文件位置,默认~/.ssh/id_rsa
# -C 新的注释,一般添加邮箱,用于程序提示信息区分不同用户,默认用户名@主机名
# -b 指定生成公钥的bits长度
$ ssh-keygen -t rsa -f ~/.ssh/xxx -b 521 -C "xxxx" 
ssh-keygen.png

对于是否需要设定私钥密码的可依定个人情况,如果担心私钥安全,可设定一个;

$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pubid_rsaid_rsa.pub是公钥,id_rsa是私钥,其中id_rsa为默认文件名称,若如上图指定了文件路径及名称,则按照指定路径及文件名生成;

ssh-agent

ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序,其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。

说明:若ssh登录使用密钥验证方式登录,则需要输入私钥的密码(生成密钥时指定的密码),若使用ssh-agent代理,则在同一个session会话下,只需要输入一次私钥密码即可,由ssh-agent帮我们代理,避免每次登录都需要输入私密码;

github SSH登录,若设置私钥密码则需要每次输入,可通过ssh-agent代理实现免输入私钥密码;

若登录时未开启,可手动开启ssh-agent,可通过如下命令:

$ eval "$(ssh-agent -s)"

添加生成的 SSH keyssh-agent:

$ ssh-add ~/.ssh/id_rsa

查看添加的SSH key

$ ssh-add -l

ssh-copy-id

若需要免密登录,则需要将用户的public key文件内存追加复制到登录主机的authorized_keys配置文件中(默认路径为~/.ssh/authorized_keys),或者直接通过ssh-copy-id工具完成,具体如下:

# 默认拷贝的公钥文件为~/.ssh/id*.pub,也可以通过 -i 选项指定
$ ssh-copy-id user@host

使用上述命令后即可实现免密登录

ssh 配置

ssh配置包括系统级别的(针对客户端的默认为/etc/ssh/ssh_config,针对服务端的``/etc/ssh/sshd_config)及用户级别的配置文件(默认为~/.ssh/config`);且配置文件存在优先级,低优先级的配置项可视作默认值;而高优先级的配置项则会覆盖默认值。按优先级,有如下排序:

  1. 用户实际执行 ssh 时传入的参数;
  2. 用户的 SSH 配置文件 ${HOME}/.ssh/config
  3. 系统的 SSH 配置文件 /etc/ssh/ssh_config

/etc/ssh/config配置文件选项如下:

选项参数                              说明
Host *                             选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。
ForwardAgent no                    设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardX11 no                        设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)
RhostsAuthentication no            设置是否使用基于rhosts的安全验证
RhostsRSAAuthentication no         设置是否使用用RSA算法的基于rhosts的安全验证
RSAAuthentication yes                设置是否使用RSA算法进行安全验证
PasswordAuthentication yes         设置是否使用口令验证
FallBackToRsh no                     设置如果用ssh连接出现错误是否自动使用rsh
UseRsh no                            设置是否在这台计算机上使用“rlogin/rsh”
BatchMode no                         如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用
CheckHostIP yes                    设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”
StrictHostKeyChecking no             如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接
IdentityFile ~/.ssh/identity         设置从哪个文件读取用户的RSA安全验证标识
Port 22                            设置连接到远程主机的端口
Cipher blowfish                    设置加密用的密码
EscapeChar ~                         设置escape字符

/etc/ssh/sshd_config配置文件选项如下:

参数选项                                        说明
Port 22                     SSH 预设使用 22 这个 port,您也可以使用多的 port !
Protocol 2,1                            选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 这个分隔了!
ListenAddress 0.0.0.0           监听的主机适配卡
RSAAuthentication yes           是否使用纯的 RSA 认证!?仅针对 version 1 !
PubkeyAuthentication yes    是否允许 Public Key ?只有 version 2
AuthorizedKeysFile   .ssh/authorized_keys   设定若要使用不需要密码登入的账号时,那么那个账号的存放档案所在档名!
IgnoreRhosts yes                    是否取消使用 ~/.ssh/.rhosts 来做为认证!
RhostsRSAAuthentication no  针对 version 1 ,使用 rhosts 档案在/etc/hosts.equiv配合 RSA 演算方式来进行认证!
HostbasedAuthentication no  这个项目与上面的项目类似,不过是给 version 2 使用的!
IgnoreUserKnownHosts no         是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容
PasswordAuthentication yes  密码验证当然是需要的!
KeepAlive yes           一般而言,如果设定这项目的话,那么 SSH Server 会传送KeepAlive 的讯息给 Client 端,以确保两者的联机正常!在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会有僵尸程序的发生!
UsePrivilegeSeparation yes  使用者的权限设定项目!
DenyUsers *                                 设定受抵挡的使用者名称
AllowUsers *                                设定允许的使用者名称
PermitRootLogin no                  是否允许root权限登录
.....

常用的选项如下:

  • Host,限定主机名
  • ForwardAgent,是否开启代理模式,若使用ssh-agent并指定私钥,需要开启
  • RSAAuthentication,是否使用RSA算法进行安全验证,默认YES
  • PasswordAuthentication,是否开启口令验证
  • Port,指定连接到远端主机的端口,默认22
  • ListenAddress,指定允许连接的主机地址
  • AllowUsers,指定允许连接的用户

git-ssh配置

  • 设置git账号的usernameemail

    $ git config --global user.name "humingx"
    $ git config --global user.email "humingx@yeah.net"
    
  • 生成ssh密钥,见上

  • 添加私钥到ssh-agent(若存在私钥密码的话),以避免频繁输入私钥密码

  • 登录github设置相应的ssh公钥


    github
  • 测试

ssh -T git@github.com验证连接性,成功如下:

image.png

Reference

ssh配置文件详解

git-ssh 配置和使用

ssh-keygen - Generate a New SSH Key

最佳搭档:利用 SSH 及其配置文件节省你的生命

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容