ssh访问远程服务器
㈠ SSH 之远程登录
从客户端来看,SSH提供两种级别的安全验证。
对于第二种级别,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这铅乎种攻击方式也是不可能的(因为他没有用户的私人密匙)。但是整个登录的过程可能需要10秒。
将本地用户生成的公钥推送至远程服务器后,远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
这里不使用ssh--id命令,改用下面的命令,来解释公钥的保存过程:
输入命令 ssh user@host ,然后根据提示输入远程服务器的登录密码
也可在配置文件/etc/ssh/ssh_config 中设置user和host(ip), 来简化命令, 配置如下:
配置后, 登录请求时只需输入如洞悉下命令:
使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。
公钥登录原理 :就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果解密验证成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
执行上述命令首先会让你输入生成密钥的文件名: myPemKey (自定义),之后一路回车。
配置后,登录远槐颤悉程服务器时只需输入一下命令,便可直接登录成功:
修改后重启ssh服务
则远程连接时指定端口
(1) 通过iptables设置ssh端口的白名单,如下设置只允许192.168.1.0/24网段的客户机可以远程连接本机
(2) 通过/etc/hosts.allow里面进行限制(如下),/etc/hosts.deny文件不要任何内容编辑,保持默认!
例如:
修改远程服务器ssh服务配置文件/etc/ssh/sshd_config
修改远程服务器配置文件/etc/ssh/sshd_config, 如下:
如果本机系统有些账号没有设置密码,而ssh配置文件里又没做限制,那么远程通过这个空密码账号就可以登陆了,这是及其不安全的,所以一定要禁止空密码登陆。
修改远程服务器配置文件/etc/ssh/sshd_config,如下:
参考:
㈡ Mac下使用SSH远程登录服务器
MAC 是自带SSH的,可以使用whereis查看是否存在,在终端执行下面的命令:
执行完后会打印存在路径
之后查看现有进程,执行下列命令:
执行完后会打印现有进程,但是你会发现找不到ssh对应的进程
下列为我的终端执行命令后的结果
这时候如果直接使用SSH命令连接本地主机或者远程主机会遇到下列错误:
解决方法:打开系统偏好设置,在共享中,打开远程登录,如下图:
之后使用ssh localhost来测试一下,如果提示输入密码来认证就没问题了。
之后再grep一下进程就可以看到ssh进程在运行了:
可以通过ssh命令连接其他主机,例如:
ssh [email protected]
也可以通过ssh命令连接其他服务器,例如:ssh -p 端口 用户名@服务器ip地址
㈢ 【linux】SSH 使用密码/公钥远程登录总结
本文是笔者查阅网上资料做的总结,关于SSH原理,什么是对称加密和非对称加密,本文不过多介绍。这里介绍一下SHH的工作过程、配制方法,可能出现的问题及解决方法。
说明:本文中涉及的例子,SSH客户端为:本地主机A,SSH服务器为:服务器B
SSH协议采用C-S(客户端-服务器端)架构进行双方的身份验证以及数据的加密。
服务器端组件监听指定的端口,负责安全连接的建立、对连接方的身份认证、以及为通过身份认证的用户建立正确的环境。
客户端负责发起最初的TCP握手、安全连接的建立、验证服务器的身份与之前记录中的一致、并将自己的验证信息提供给服务器。
一个SSH会话的建立过程分为两个阶段。第一阶段,双方沟通并同意建立一个加密连接通道以供后续信息传输用。第二阶段,对请求接入的用户进行身份验证以确定服务器端是否要给该用户开放访问权限。
当客户端发起TCP连接时,服务器端返回信息说明自己支持的协议版本,如果客户端上支持的协议与之匹配,则连接继续。服务器会提供自己的公共主机密钥(public host key)以让客户端确认自己访问的是正确的机器。
然后,双方采用一种Diffie-Hellman算法共同为该会话建立密钥。每一方的一部分私有数据,加上来自对方的一部分公共数据,通过这种算法计算,能够得出完全相同的密钥用于本次会话。
整个会话的通讯内容都使用该密钥进行加密。这个阶段使用的公钥/私钥对与用户验证身份用的SSH密钥是完全无关的。
经典Diffie-Hellman算法的计算步骤如下:
这个共享密钥的加密方式被称为二进制数据包协议(binary packet protocol)。该过程能够让双方平等的参与密钥生成的过程,而不是由单方掌握。这种共享密钥生成的过程是安全的,双方没有交换过任何未经加密的信息。
生成的密钥是对称式密钥,一方用于加密信息的密钥等同于另一方用于解密信息的密钥,而任何第三方由于不持有该密钥,是无法解密双方传递的内容的。
会话加密通道建立后,SSH开始进入用户认证阶段。
下一步,服务器验证用户身份以决定是否准许其访问。验证有不同的方式,选择的验证方式取决于服务器的支持。
最简单的验证是密码验证:服务器要求客户端输入密码,客户端输入的密码经过上述的通道加密传输给服务器。
虽然密码是加密过的,然而该方法仍然不被推荐,因为用户经常为了省事而使用过于简单的密码,而这类密码很容易就能够被自动化脚本破解。
最流行的验证方式是SSH密钥对,这也是当前最推荐的方式。SSH密钥对是非对称密钥,私钥和公钥分别用于不同的功能。
公钥用于加密,而私钥用于解密。公钥可以随意上传、共享,因为公钥的流通并不会危及到私钥的保密性。
SSH密钥对的验证过程起始于上一部分加密通道建立之后,其具体执行步骤如下:
简单来说,服务器端用公钥加密信息,客户端用私钥解密信息以证明自己持有私钥。该过程同时使用了对称加密和非对称加密,两种方式各有自己的功用。
命令如下:
用户名:为要登录的服务器B中已存在的用户账户名
IP地址:为服务器B的IP地址
-p 端口号:用来指定端口号,默认为22
第一次登录时,会提示如下提示:
大概意思是说,你正在访问的主机不能验证它的真实性,它的RSA key(当前访问主机的公钥)指纹是怎样的,你确定要继续连接吗?
输入yes继续,会提示,已永久把当前访问主机的RSA key添加到了已知主机文件(用户目录下,.ssh 文件夹中的knwon_hosts文件)中。之后再次 SSH 登录就不再有该提示了。
接着,输入登录账户的密码即可。
SSH 密码登录,需要服务器开启密码验证权限,编辑服务器SSH配置命令如下:
在 sshd_config 文件中,Protocol 2 下面 #PasswordAuthentication yes,将前面的#号去掉,保存退出。
公钥登录,即免密码登录。避免的每次登录都要输入的麻烦,也防止了中间人攻击。是SSH远程登录最常用的登录方式。
提示输入密钥对名称,直接回车,使用默认名称即可;
提示输入密码(使用私钥时,要输入密码),直接回车,不使用密码即可。
首先,登录服务器B,在进行下面的操作。
找到 #PubkeyAuthentication yes,删除 #号,保存退出。
重启 ssh 服务
也可指定验证私钥:
本地主机A,生成密钥对后:
sudo vim /etc/selinux/config
㈣ 使用 SSH-Key 登录远程服务器
ssh 提供两种级别的安全认证:
需要知道用户名和密码即可登录,该连接是加凯缺密的,但客户端不能确认目标主机是否为“伪造的”,也不能保证口令安全。
远程主机的 /etc/ssh/sshd_config 需配置:
重启 sshd 使改动生效:
需要用户持有“公钥/私钥对”,庆裤远程服务器持有公钥,本地持有私钥。
客户端向服务器发出请求。服务器收到请求之后,先在用户的主目录下找到该用户的公钥,然后对比用户发送过来的公钥。如果一致,服务器用公钥加密“质询”并发送给客户端。客户端收到“质询”后用私钥解密,再发还给服务器。认证结束。
生成 ssh-key,选加密算法(rsa、dsa),给秘钥命名(可选):
passphrase 是证书口令,以加强安全性,避免证书被恶意复制。
会在 ~.ssh 下生成 id_rsa , id_rsa.pub 两个文件,分誉孙简别是 私钥/公钥。
公钥需保存到远程服务器 ~/.ssh/authorized_keys 里,私钥由客户端本地留存。
要保证 .ssh 和 authorized_keys 都只有用户自己有写权限。否则验证无效。
简单情况下,通过手动指定私钥文件登录
觉得麻烦可以配置客户端的 /etc/ssh/ssh_config
你也可以使用 SSH Agent,下面以使用 GitHub 为场景简单介绍。
创建 ~/.ssh/config
配置完成后,在连接非默认账号的仓库时,远端地址要修改为