1. linux 如何关闭ssh远程连接
service sshd stop关闭服务
2. Linux-SSL和SSH和OpenSSH,OpenSSL有什么区别
ssl是通讯链路的附加层。可以包含很多协议。https, ftps, .....
ssh只是加密的shell,最初是用来替代telnet的。通过port forward,也可以让其他协议通过ssh的隧道而起到加密的效果。
SSL是一种国际标准的加密及身份认证通信协议,您用的浏览器就支持此协议。SSL(Secure Sockets Layer)最初是由美国Netscape公司研究出来的,后来成为了Internet网上安全通讯与交易的标准。SSL协议使用通讯双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通讯,在通讯双方间建立起了一条安全的、可信任的通讯通道。它具备以下基本特征:信息保密性、信息完整性、相互鉴定。 主要用于提高应用程序之间数据的安全系数。SSL协议的整个概念可以被总结为:一个保证任何安装了安全套接字的客户和服务器间事务安全的协议,它涉及所有TC/IP应用程序。
SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。SSH的安全验证是如何工作的从客户端来看,SSH提供两种级别的安全验证。第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。
OpenSSL------一个C语言函数库,是对SSL协议的实现。
OpenSSH-----是对SSH协议的实现。
ssh 利用 openssl 提供的库。openssl 中也有个叫做 openssl 的工具,是 openssl 中的库的命令行接口。
从编译依赖上看:
openssh依赖于openssl,没有openssl的话openssh就编译不过去,也运行不了。
HTTPS可以使用TLS或者SSL协议,而openssl是TLS、SSL协议的开源实现,提供开发库和命令行程序。openssl很优秀,所以很多涉及到数据加密、传输加密的地方都会使用openssl的库来做。
可以理解成所有的HTTPS都使用了openssl。以root身份执行命令:grep -l 'libssl.*deleted' /proc/*/maps | tr -cd 0-9\\n | xargs -r ps u,可以看到哪些进程加载了老版本的openssl库。
3. linuxssh指定秘钥交换算法
linuxssh指定秘钥交换算法如下:
客户端向目标服务器发送登录请求。在SSH服务启用了证书验证登录方式后,会优先通过证书验证方式进行登录验证。目标服务器根据SSH服务配置,在用户对应目录及文件中读取到有效的公钥信息。目标服务器生成一串随机数,然后使用相应的公钥对其加密。目标服务器将加密后的密文发回客户端。客户端使用默认目录或-i参数指定的私钥尝试解密。如果解密失败,则会继续尝试密码验证等其它方式进行登录校验。如果解密成功,则将解密后的原文信息重新发送给目标服务器。意思类似于:“看,这是这段话的原文。我能读懂发过来的密文,我拥有服务器的控制权,请让我登录。目标服务器对客户端返回的信息进行比对。如果比对成功,则表示认证成功,客户端可以登录。如果对比失败,则表示认证失败,则会继续尝试密码验证等其它方式进行登录校验。
4. Linux下SSH Session复制功能实现方法
特别感谢阿干同学的邮件分享。
详细方法
代码如下:
Linux/mac下,在$HOME/.ssh/config中加入
Host
*
ControlMaster
auto
/tmp/ssh-%r@%h
至此只要第一次SSH登录输入密码,之后同个Hosts则免登。
配置文件分析
man
ssh_config
5
代码如下:
Specify
the
path
to
the
control
socket
used
for
connection
sharing
as
described
in
the
ControlMaster
section
above
or
the
string
none
to
disable
connection
sharing.
In
the
path,
%l
will
be
substituted
by
the
local
host
name,
%h
will
be
substituted
by
the
target
host
name,
%p
the
port,
and
%r
by
the
remote
login
username.
It
is
recommended
that
any
ControlPath
used
for
opportunistic
connection
sharing
include
at
least
%h,
%p,
and
%r.
This
ensures
that
shared
connections
are
uniquely
identified.
%r
为远程机器的登录名
%h
为远程机器名
原理分析
严格地讲,它并不是真正意义上的Session
Copy,而只能说是共享Socket。
第一次登录的时候,将Socket以文件的形式保存到:/tmp/ssh-%r@%h这个路径
之后登录的时候,一旦发现是同个主机,则复用这个Socket
故,一旦主进程强制退出(Ctrl+C),则其他SSH则被迫退出。
可以通过ssh
-v参数,看debug信息验证以上过程
备注
有同学说在linux上通过证书的形式,可以实现免登录,没错。
对于静态密码,完全可以这么干;对于动态密码(口令的方式),则上述手段可以方便很多。
5. 在linux下使用ssh认证,不输入密码访问另一台机器
在linux下使用ssh认证,不输入密码访问另一台机器linux程序员在日常工作中都会遇到远程登陆这样的问题,每次输入密码是不是很烦人.
www.dnjsb.com
我就在这整理一下,ssh证书到底是怎么搞的!在linux下使用ssh认证,不输入密码访问另一台机器在工作中由于常用到ssh登录其它机器,所在每台机器上做了ssh认证,这样就不用每次都输入繁琐的密码。有两台机器:server_1
和
server_2账号都为:work转到work账号下:su
-
work运行:ssh-keygen
-t
rsa
(一路回车下去
)命令输出为:
www.dnjsb.com
Enter
file
in
which
to
save
the
key
(/home/work/.ssh/id_dsa):Enter
passphrase
(empty
for
no
passphrase):Enter
same
passphrase
again:Your
identification
has
been
saved
in
/home/work/.ssh/id_dsa.Your
public
key
has
been
saved
in
/home/work/.ssh/id_dsa.pub.The
key
fingerprint
is:32:21:e1:3b:7d:6e:de:4b:39:da:af:38:fe:90:40:61在/home/work目录下就产生了.ssh的隐含目录,进入些目录下产生两个文件:id_dsa
------------
私钥文件id_dsa.pub
------------
公钥文件将id_dsa.pub复制一份文件名为:authorized_keys2并将
authorized_keys2
的属性改为
600
即文件所属用户有读和写的权限,组用户和其它用户禁止读写,用命令:代码:cp
id_dsa.pub
authorized_keys2chmod
600
authorized_keys2同样在server_2上做以上操作,下一步就实现真正的ssh认证了:将server_1上/home/work/.ssh目录下的id_dsa.pub公钥文件拷到server_2的/home/work/.ssh目录下(注意:不要覆盖掉server_2的id_dsa.pub,拷时要改名)如:代码:[work@server_1
.ssh]$
scp
id_dsa.pub在server_2的/home/work/.ssh目录下就有了如下文件:authorized_keys2id_dsaid_dsa.pubserver_1.pub用命令:代码:cat
server_1.pub
>>authorized_keys2(注意一定要用追加操作
>>
不能用
>)这样server_1到server_2的ssh认证就做好了。在server_1上用命令:代码:ssh就直接登录到server_2上,而不用输入密码了。server_2到server_1的认证同上操作即可。
6. 【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
7. linux如何配置双机SSH信任然后双向免密码登陆
一、实现原理
使用一种被称为"公私钥"认证的方式来进行ssh登录。"公私钥"认证方式简单的解释是:
首先在客户端上创建一对公私钥(公钥文件:~/.ssh/id_rsa.pub;私钥文件:~/.ssh/id_rsa),然后把公钥放到服务器上(~/.ssh/authorized_keys),自己保留好私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。
二、实验环境
A机:TS-DEV/10.0.0.163
B机:CS-DEV/10.0.0.188
三、Linux/Unix双机建立信任
3.1
在A机生成证书
在A机root用户下执行ssh-keygen命令,在需要输入的地方,直接回车,生成建立安全信任关系的证书。
#
ssh-keygen
-t
rsa
注意:在程序提示输入passphrase时直接输入回车,表示无证书密码。
上述命令将生成私钥证书id_rsa和公钥证书id_rsa.pub,存放在用户家目录的.ssh子目录中。
3.2
查看~/.ssh生成密钥的文件
#
cd
~/.ssh
#
ll
3.3
A对B建立信任关系
将公钥证书id_rsa.pub复制到机器B的root家目录的.ssh子目录中,同时将文件名更换为authorized_keys,此时需要输入B机的root用户密码(还未建立信任关系)。建立了客户端到服务器端的信任关系后,客户端就可以不用再输入密码,就可以从服务器端拷贝数据了。
#
scp
-r
id_rsa.pub
10.0.0.188:/root/.ssh/authorized_keys
3.4
B对A建立信任关系
在B机上执行同样的操作,建立B对A的信任关系。
#
ssh-keygen
-t
rsa
#
cd
~/.ssh/
#
ll
#
scp
-r
id_rsa.pub
10.0.0.163:/root/.ssh/authorized_keys
如果想让B,C同时可以scp不输入密码,传输A中的数据;
则要把B、C的公钥都给
A;
操作步骤:把两机器的id_rsa.pub中的数据都拷贝到A的/root/.ssh/authorized_keys文件中,一行表示一条;
A:
scp
-r
id_rsa.pub
10.0.0.163:/root/.ssh/authorized_keys
B:
scp
-r
id_rsa.pub
10.0.0.188:/root/.ssh/authorized_keys
测试
ssh
[email protected]
'hostname'
///
ssh
[email protected]
'hostname'
如果连接反应慢,请修改以下两参数
/etc/ssh/sshd_config
GSSAPIAuthentication
no
UseDNS
no
然后重启service
sshd
restart
8. Linux-SSL和SSH和OpenSSH,OpenSSL有什么区别
1、SSL(Secure Sockets Layer 安全套接层),它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。比如你访问https://servername 就是用了ssl协议,地址栏会出现小锁,双击就能查看ssl服务器证书的详细信息。TCP端口:443
2、SSH(Secure Shell 远程登陆用),安全可以和telnet比较一下,比如telnet传输用户密码是明文的,而SSH是加密的。明文的可以监听到。TCP端口22
3、OpenSSH是个SSH的软件,OpenSSH is the premier connectivity tool for remote login with the SSH protocol. linux/unix都用openssh软件提供SSH服务。简单来说,比如以前的Solaris系统默认不提供ssh服务,需要安装OpenSSH才行。
The OpenSSH suite consists of the following tools:
Remote operations are done using ssh, scp, and sftp.
Key management with ssh-add, ssh-keysign, ssh-keyscan, and ssh-keygen.
The service side consists of sshd, sftp-server, and ssh-agent.
4、OpenSSL是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序。比如很多程序安装依赖openssl头文件。
openssl命令也是一个很实用且有很多参数的工具。比如申请ssl证书时候或者计算hash值时候都用的到。例如:
a)openssl md5 a.txt
b)echo -n 123456 |openssl md5
c)openssl创建localhost证书
d)使用openssl命令加密文件
e)验证ssl服务器
openssl s_client -connect servername:443
9. Linux 下实现SSH互信
一、准备两台服务器:
A机:192.168.1.1
B机:192.168.1.2
二、双机建立信任
1、在A机生成秘钥证书
在root下执行ssh-keygen命令,一路回车,生成秘钥证书
# ssh-keygen -t rsa
2、查看生成秘钥文件
# cd ~/.ssh
# ll
文件:私钥证书id_rsa、公钥证书id_rsa.pub
3、A对B建立信任关系
3.1 将公钥证书id_rsa.pub复制到机器B的root家目录的.ssh子目录中,同时将文件名更换为authorized_keys
# scp -r id_rsa.pub [email protected]:/root/.ssh/authorized_keys
3.2 若3.1报错:No such file or directory
使用:# ssh--id -i id_rsa.pub [email protected]
ssh--id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中
3.3 查看B机器是否接收
# ssh 192.168.1.2
# cd .ssh/
# ls
# cat authorized_keys
# exit
3.4 B对A建立信任,同上3的操作步骤