❶ 【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 命令怎么用
ssh命令用法:ssh+加要执行的命令,需在SSH 2客户端上使用。
1、SSH客户端版本查看。
有时需确认SSH客户端及其相应的版本号。使用ssh -V命令可以得到版本号。注意,Linux一般自带的是OpenSSH: 下面例子即表明该系统正在使用OpenSSH:
$ ssh -V OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003。
下面的例子表明该系统正在使用SSH2:
$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu。
2、用SSH登录到远程主机。
当第一次使用ssh登录远程主机时,会出现没有找到主机密钥的提示信息。输入"yes"后,系统会将远程主机的密钥加入到主目录下.ssh/hostkeys下,这样就可继续操作。
3、调试SSH客户端会话。
当ssh连接出现问题时,需通过查看调试信息来定位这些错误。使用v选项(注意:是小写的v),即可查看调试信息。
4、用SSH退出符切换SSH会话。
远程登陆到一台主机A,然后从A登陆到B,如希望在A上做操作,还得再开一个终端。
当使用ssh从本机登录到远程主机时,希望切换到本地做一些操作,然后再重新回到远程主机。这时,不需中断ssh连接,只需按照如下步骤操作即可:
当已经登录到了远程主机时,可能想要回到本地主机进行一些操作,然后又继续回到远程主机。
(1)登入远程主机:
localhost$ ssh -l jsmith remotehost。
(2)已连接远程主机:
remotehost$。
(3)要临时回到本地主机,输入退出符号:“~”与“Control-Z”组合。
当输入“~”不会立即在屏幕上看到,按下<Control-Z>并且按回车之后一起显示。如下,在远程主机中以此输入“~<Control-Z>”remotehost$ ~^Z [1]+ Stopped ssh -l jsmith remotehost localhost$。
(4)已经退回到本地主机,ssh远程客户端会话就在UNIX后台中运行,可向下面那样查看它:
localhost$ jobs [1]+ Stopped ssh -l jsmith remotehost。
(5)可将后台运行的ssh会话进程切换到前台,重新回到远程主机,而无需输入密码:localhost$ fg %1 ssh -l jsmith remotehost remotehost$。
5、用SSH退出字符会话,显示信息。
要取得一些关于当前会话有用信息,可按以下方式完成。这只能在SSH 2客户端上使用。
登录到远程服务器:localhost$ ssh -l jsmith remotehost。
在远程服务器上,输入ssh退出字符~并输入s。会显示出很多有关当前ssh连接的有用信息。
❸ ssh命令如何使用
ssh命令用于服务器的远程控制,一般情况下只要用“ssh IP地址”这样的格式就可以了,例如:“ssh 192.168.10.10”,可参考:第9章 使用ssh服务管理远程主机。
❹ SSH是什么
是一种加密的网络传输协议。
可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系悄蚂喊统,人们通常利用SSH来传输命令行界面和远程执行命令。
使用频率最高的场合类Unix系统,但是Windows操作系统也能有限度地使用SSH。2015年,微软宣布将在未来的操作系统中提供原生SSH协议支持,Windows10 1809 版本已提供可手动安装的OpenSSH工具。
(4)ssh用法及命令扩展阅读
ssh结构
SSH是由客户端和服务端的软件组成的,有两个不兼容的版启野本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
1、服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。
2、客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
3、他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。SSH 1.x和SSH 2.x在连接协议上有一些差异。
SSH被设计成为工作于自己的基础之上而不利用超级服物握务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。
启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理 。
❺ SSH多种远程登录方法
使用 SSH 登录服务器有两种方法: 用户账号登录 和 使用公钥登录
直接使用以下命令
另外可以配置主机别名,这个和 使用公钥登录 差不多,区别是无需指定公钥地址而已,这里就不重复了。
方法一:(在命令行中指定私钥文件)
方法二:(使用 ssh-agent 代理)
方法三:(在 SSH 配置中指定私钥文件)
使用跳板机登录的方法在我看来不算其它登录方式,它用到的还是本章的内容。
如果我把这三种方法都用了呢?即既使用了 -i ~/.ssh/id_rsa_server ,又使用了 ssh-agent ssh-add ~/.ssh/id_rsa_server ,还使用了域名主机配置 IdentityFile ~/.ssh/id_rsa 。
答案很简单,SSH 会先使用 -i ~/.ssh/id_rsa_server ,如果登录失败,则使用 ssh-agent ssh-add ~/.ssh/id_rsa_server ,找不到合适的公钥的话,再使用 IdentityFile ~/.ssh/id_rsa ,还是失败的话则提示输入密码,如果允许账号登录的话,否则整个登录失败。
❻ ssh使用详解
简单来说,ssh是一种 网络协议 ,用于计算机之间的加密登录。如果一个用户从本地计算机,使用ssh协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
SSH 之所以安全是采用了公钥加密的方式,通过客户自己签发公钥加密用户密码,再通过主机持有的私钥解密;不像 HTTPS 协议存在证书管理中心CA用于验证公钥的合法性,因此,存在被中间人劫持的风险,即劫持登录请求发送篡改的公钥来截获用户登录密码,俗称”中间人攻击“;
不过 SSH 存在一套自有的验证方式:口令验证及密钥验证,可有效避免大部分的攻击;
使用上述命令测试连接性及验证流程;
通过 ssh-keygen 工具生成本地公钥文件,常用命令如下:
在 $HOME/.ssh/ 目录下,会新生成两个文件: id_rsa.pub 和 id_rsa 。 id_rsa.pub 是公钥, id_rsa 是私钥,其中 id_rsa 为默认文件名称,若如上图指定了文件路径及名称,则按照指定路径及文件名生成;
说明:若 ssh 登录使用密钥验证方式登录,则需要输入私钥的密码(生成密钥时指定的密码),若使用 ssh-agent 代理,则在同一个 session 会话下,只需要输入一次私钥密码即可,由 ssh-agent 帮我们代理,避免每次登录都需要输入私密码;
若登录时未开启,可手动开启 ssh-agent ,可通过如下命令:
添加生成的 SSH key 到 ssh-agent :
查看添加的 SSH key :
若需要免密登录,则需要将用户的 public key 文件内存追加复制到登录主机的 authorized_keys 配置文件中(默认路径为 ~/.ssh/authorized_keys ),或者直接通过 ssh--id 工具完成,具体如下:
使用上述命令后即可实现 免密登录 ;
ssh 配置包括系统级别的(针对客户端的默认为 /etc/ssh/ssh_config ,针对服务端的``/etc/ssh/sshd_config )及用户级别的配置文件(默认为 ~/.ssh/config`);且配置文件存在优先级,低优先级的配置项可视作默认值;而高优先级的配置项则会覆盖默认值。按优先级,有如下排序:
/etc/ssh/config 配置文件选项如下:
/etc/ssh/sshd_config 配置文件选项如下:
常用的选项如下:
ssh -T [email protected] 验证连接性,成功如下:
ssh配置文件详解
git-ssh 配置和使用
ssh-keygen - Generate a New SSH Key
最佳搭档:利用 SSH 及其配置文件节省你的生命