Linux安全运维进阶:SSH常见配置

244 篇文章 11 订阅
订阅专栏
143 篇文章 15 订阅
订阅专栏
本文详细介绍了SSH的加密验证机制,包括基于口令和密钥的安全验证,并讲解了SSH的主要组成部分。此外,还探讨了如何通过SSH进行端口转发,包括本地转发、远程转发及其应用场景。最后,文章提到了SSH的密钥认证方式,如何实现免密码登录远程服务器以及使用expect工具自动化输入用户名和密码。
摘要由CSDN通过智能技术生成

1、SSH 无缝切换远程加密

一、了解SSH

1.随便说说

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

2.过关

从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的×××。

第二种级别(基于密匙的安全验证)

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种×××方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒

3.层次

SSH 主要由三部分组成:

传输层协议 [SSH-TRANS]

提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

用户认证协议 [SSH-USERAUTH]

用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。

二、事前准备

1.简单说一句

ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。

2.常用语法:

ssh(选项)(参数)

-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。

3.官方语法

usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] 
[-D [bind_address:]port] [-E log_file] [-e escape_char] 
[-F configfile] [-I pkcs11] [-i identity_file] 
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] 
[-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] 
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] 
[user@]hostname [command] 

三、一顿操作(快速连接)

1.下载安装XSHELL
Google一下
2.新建连接会话
在这里插入图片描述
3.设置用户身份验证(默认选择Password)
在这里插入图片描述
4.连接服务器

四、无缝连接

1.确认两台服务器信息
在这里插入图片描述
2.设置hosts配置域名映射
在这里插入图片描述
3.生成密钥
在这里插入图片描述
4.拷贝密钥到另一台主机
在这里插入图片描述
5.查看服务器的密钥
在这里插入图片描述
6.无密码加密连接
在这里插入图片描述

五、回顾

1.解析.ssh目录下的奥秘

[root@web1 .ssh]# tree -l.   
   
├── authorized_keys #web1主机上的认证文件:记录登录密钥├── id_rsa #web1主机的私钥├── id_rsa.pub #web1主机的公钥└── known_hosts #记录登录到web1的服务key:校验作用0 directories, 4 files   
   
[root@web1 .ssh]#   

步骤如下:web1服务器生成密钥–》复制web1的公钥到web2–》输入web2服务器密码–》web1公钥加入到web2的认证文件–》web1无密码连接web2–》生成web1的校验密钥到known_hosts–》web2服务器校验known_hosts与 authorized_keys文件是否匹配–》匹配就允许登录,反之拒绝–》web2无密码连接web1,同理。

2、实战 SSH 端口转发

第一部分 概述

当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我们带来什么好处吧!

1.1 端口转发概述

让我们先来了解一下端口转发的概念吧。我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过将 TCP 端口转发来使用 SSH 进行通讯。总的来说 SSH 端口转发能够提供两大功能:
l 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
l 突破防火墙的限制完成一些之前无法建立的 TCP 连接。
图 1. SSH 端口转发
在这里插入图片描述
如上图所示,使用了端口转发之后,TCP 端口 A 与 B 之间现在并不直接通讯,而是转发到了 SSH 客户端及服务端来通讯,从而自动实现了数据加密并同时绕过了防火墙的限制。

第二部分 本地转发与远程转发

1.1 本地转发实例分析

我们先来看第一个例子,在实验室里有一台LDAP服务器(LdapServerHost),但是限制了只有本机上部署的应用才能直接连接此LDAP服务器(也就是通过127.0.0.1或localhost)。如果我们由于调试或者测试的需要想临时从远程机器(LdapClientHost)直接连接到这个 LDAP 服务器 , 有什么方法能够实现呢?
答案无疑是本地端口转发了,它的命令格式是:

ssh -L <local port>:<remote host>:<remote port> <SSH hostname>

在 LdapClientHost 上执行如下命令即可建立一个 SSH 的本地端口转发,例如:

$ ssh -L 7001:localhost:389 LdapServerHost

图 2. 本地端口转发
在这里插入图片描述
这里需要注意的是本例中我们选择了 7001 端口作为本地的监听端口,在选择端口号时要注意非管理员帐号是无权绑定 1-1023 端口的,所以一般是选用一个 1024-65535 之间的并且尚未使用的端口号即可。
然后我们可以将远程机器(LdapClientHost)上的应用直接配置到本机的 7001 端口上(而不是 LDAP 服务器的 389 端口上)。之后的数据流将会是下面这个样子:
l 我们在 LdapClientHost 上的应用将数据发送到本机的 7001 端口上,
l 而本机的 SSH Client 会将 7001 端口收到的数据加密并转发到 LdapServertHost 的 SSH Server 上。
l SSH Server 会解密收到的数据并将之转发到监听的 LDAP 389 端口上,
l 最后再将从 LDAP 返回的数据原路返回以完成整个流程。
l 我们可以看到,这整个流程应用并没有直接连接 LDAP 服务器,而是连接到了本地的一个监听端口,但是 SSH 端口转发完成了剩下的所有事情,加密,转发,解密,通讯。

这里有几个地方需要注意:

(1) SSH 端口转发是通过 SSH 连接建立起来的,我们必须保持这个 SSH 连接以使端口转发保持生效。一旦关闭了此连接,相应的端口转发也会随之关闭。
(2) 我们只能在建立 SSH 连接的同时创建端口转发,而不能给一个已经存在的 SSH 连接增加端口转发。
(3) 你可能会疑惑上面命令中的 为什么用 localhost,它指向的是哪台机器呢?在本例中,它指向 LdapServertHost 。我们为什么用 localhost 而不是 IP 地址或者主机名呢?其实这个取决于我们之前是如何限制 LDAP 只有本机才能访问。如果只允许 lookback 接口访问的话,那么自然就只有 localhost 或者 IP 为 127.0.0.1 才能访问了,而不能用真实 IP 或者主机名。
(4) 命令中的 和 必须是同一台机器么?其实是不一定的,它们可以是两台不同的机器。我们在后面的例子里会详细阐述这点。
(5) 好了,我们已经在 LdapClientHost 建立了端口转发,那么这个端口转发可以被其他机器使用么?比如能否新增加一台 LdapClientHost2 来直接连接 LdapClientHost 的 7001 端口?答案是不行的,在主流 SSH 实现中,本地端口转发绑定的是 lookback 接口,这意味着只有 localhost 或者 127.0.0.1 才能使用本机的端口转发 , 其他机器发起的连接只会得到“ connection refused. ”。好在 SSH 同时提供了 GatewayPorts 关键字,我们可以通过指定它与其他机器共享这个本地端口转发。
ssh -g -L ::

1.1 远程转发实例分析

我们来看第二个例子,这次假设由于网络或防火墙的原因我们不能用 SSH 直接从 LdapClientHost 连接到 LDAP 服务器(LdapServertHost),但是反向连接却是被允许的。那此时我们的选择自然就是远程端口转发了。
它的命令格式是:

ssh -R <local port>:<remote host>:<remote port> <SSH hostname>

例如在 LDAP 服务器(LdapServertHost)端执行如下命令:

$ ssh -R 7001:localhost:389 LdapClientHost

图 3. 远程端口转发
在这里插入图片描述
和本地端口转发相比,这次的图里,SSH Server 和 SSH Client 的位置对调了一下,但是数据流依然是一样的。我们在 LdapClientHost 上的应用将数据发送到本机的 7001 端口上,而本机的 SSH Server 会将 7001 端口收到的数据加密并转发到 LdapServertHost 的 SSH Client 上。 SSH Client 会解密收到的数据并将之转发到监听的 LDAP 389 端口上,最后再将从 LDAP 返回的数据原路返回以完成整个流程。
看到这里,你是不是会有点糊涂了么?为什么叫本地转发,而有时又叫远程转发?这两者有什么区别?

1.1 本地转发与远程转发的对比与分析

不错,SSH Server,SSH Client,LdapServertHost,LdapClientHost,本地转发,远程转发,这么多的名词的确容易让人糊涂。让我们来分析一下其中的结构吧。首先,SSH 端口转发自然需要 SSH 连接,而 SSH 连接是有方向的,从 SSH Client 到 SSH Server 。而我们的应用也是有方向的,比如需要连接 LDAP Server 时,LDAP Server 自然就是 Server 端,我们应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。如果这两个连接的方向一致,那我们就说它是本地转发。而如果两个方向不一致,我们就说它是远程转发。
我们可以回忆上面的两个例子来做个对照。
本地转发时:
LdapClientHost 同时是应用的客户端,也是 SSH Client,这两个连接都从它指向 LdapServertHost(既是 LDAP 服务端,也是 SSH Server)。
远程转发时:
LdapClientHost 是应用的客户端,但却是 SSH Server ;而 LdapServertHost 是 LDAP 的服务端,但却是 SSH Client 。这样两个连接的方向刚好相反。
另一个方便记忆的方法是,Server 端的端口都是预定义的固定端口(SSH Server 的端口 22,LDAP 的端口 389),而 Client 端的端口都是动态可供我们选择的端口(如上述例子中选用的 7001 端口)。如果 Server 端的两个端口都在同一台机器,Client 端的两个端口都在另一台机器上,那么这就是本地连接;如果这四个端口交叉分布在两个机器上,每台机器各有一个 Server 端端口,一个 Client 端端口,那就是远程连接。
弄清楚了两者的区别之后,再来看看两者的相同之处。如果你所在的环境下,既允许 LdapClientHost 发起 SSH 连接到 LdapServerHost,也允许 LdapServerHost 发起 SSH 连接到 LdapClientHost 。那么这时我们选择本地转发或远程转发都是可以的,能完成一样的功能。
接着让我们来看个进阶版的端口转发。我们之前涉及到的各种连接 / 转发都只涉及到了两台机器,还记得我们在本地转发中提到的一个问题么?本地转发命令中的 和 可以是不同的机器么?

ssh -L <local port>:<remote host>:<remote port> <SSH hostname>

答案是可以的!让我们来看一个涉及到四台机器 (A,B,C,D) 的例子。
图 4. 多主机转发应用
在这里插入图片描述
在 SSH Client© 执行下列命令来建立 SSH 连接以及端口转发:

$ ssh -g -L 7001:<B>:389 <D>

然后在我们的应用客户端(A)上配置连接机器(C )的 7001 端口即可。注意我们在命令中指定了“ -g ”参数以保证机器(A)能够使用机器(C)建立的本地端口转发。而另一个值得注意的地方是,在上述连接中,(A)<-> © 以及 (B)<->(D) 之间的连接并不是安全连接,它们之间没有经过 SSH 的加密及解密。如果他们之间的网络并不是值得信赖的网络连接,我们就需要谨慎使用这种连接方式了。

第三部分 其他类型的转发

1.1 动态转发实例分析

恩,动态转发,听上去很酷。当你看到这里时,有没有想过我们已经讨论过了本地转发,远程转发,但是前提都是要求有一个固定的应用服务端的端口号,例如前面例子中的 LDAP 服务端的 389 端口。那如果没有这个端口号怎么办?等等,什么样的应用会没有这个端口号呢?嗯,比如说用浏览器进行 Web 浏览,比如说 MSN 等等。
当我们在一个不安全的 WiFi 环境下上网,用 SSH 动态转发来保护我们的网页浏览及 MSN 信息无疑是十分必要的。让我们先来看一下动态转发的命令格式:

$ ssh -D <local port> <SSH Server>

例如:

$ ssh -D 7001 <SSH Server>

图 5. 动态端口转发
在这里插入图片描述
似乎很简单,我们依然选择了 7001 作为本地的端口号,其实在这里 SSH 是创建了一个 SOCKS 代理服务。来看看帮助文档中对 -D 参数的描述:
在这里插入图片描述
之后的使用就简单了,我们可以直接使用 localhost:7001 来作为正常的 SOCKS 代理来使用,直接在浏览器或 MSN 上设置即可。在 SSH Client 端无法访问的网站现在也都可以正常浏览。而这里需要值得注意的是,此时 SSH 所包护的范围只包括从浏览器端(SSH Client 端)到 SSH Server 端的连接,并不包含从 SSH Server 端到目标网站的连接。如果后半截连接的安全不能得到充分的保证的话,这种方式仍不是合适的解决方案。

1.1 X 协议转发实例分析

好了,让我们来看最后一个例子 - X 协议转发。
我们日常工作当中,可能会经常会远程登录到 Linux/Unix/Solaris/HP 等机器上去做一些开发或者维护,也经常需要以 GUI 方式运行一些程序,比如要求图形化界面来安装 DB2/WebSphere 等等。这时候通常有两种选择来实现:VNC 或者 X 窗口,让我们来看看后者。
使用 X 窗口通常需要分别安装:X Client 和 X Server 。在本例中我们的 X Client 就是所访问的远程 Linux/Unix/Solaris/HP,而我们的 X Server 则是发起访问的本地机器(例如你面前正在使用的笔记本或台式机)。把 X Client 端的 X 窗口显示在 X Server 端需要先行在 X Client 端指定 X Server 的位置,命令格式如下:

export DISPLAY=<X Server IP>:<display #>.<virtual #>

例如:

export DISPLAY=myDesktop:1.0

然后直接运行 X 应用即可,X 窗口就会自动在我们的本地端打开。
一切运行正常,但是,这时候 IT 部门突然在远程 Linux/Unix/Solaris/HP 前面加了一道防火墙。非常不幸的是,X 协议并不在允许通过的列表之内。怎么办?只能使用 VNC 了么?不,其实只要使用了 SSH 端口转发即可通过,同时也对 X 通讯数据做了加密,真是一举两得。(当然,使用此方法前最好先咨询相关 IT 部门是否符合相应的安全条例,以免造成违规操作。)
建立命令也很简单,直接从本地机器(X Server 端)发起一个如下的 SSH 连接即可:

$ ssh -X <SSH Server>

图 5. X 转发
在这里插入图片描述
建立连接之后就可以直接运行远程的 X 应用。注意建立 X 转发之后会自动设置 DISPLAY 环境变量,通常会被设置成localhost:10.0,我们无需也不应该在连接之后再进行修改此环境变量。
一个比较常见的场景是,我们的本地机器是 Windows 操作系统,这时可以选择开源的 XMing 来作为我们的 XServer,而 SSH Client 则可以任意选择了,例如 PuTTY,Cygwin 均可以配置 访问 SSH 的同时建立 X 转发。

第四部分 总结

至此,我们已经完成了本地端口转发,远程端口转发,动态端口转发以及 X 转发的介绍。回顾起来,总的思路是通过将 TCP 连接转发到 SSH 通道上以解决数据加密以及突破防火墙的种种限制。对一些已知端口号的应用,例如 Telnet/LDAP/SMTP,我们可以使用本地端口转发或者远程端口转发来达到目的。动态端口转发则可以实现 SOCKS 代理从而加密以及突破防火墙对 Web 浏览的限制。对于 X 应用,无疑是 X 转发最为适用了。虽然每一部分我们都只是简单的介绍了一下,但如果能灵活应用这些技巧,相信对我们的日常生活 / 工作也是会有所帮助的。

3、免密码登陆远程服务器并执行命令

一、SSH密钥认证方式

远程登录Linux系统采用SSH协议,专为远程登录会话和其他网络服务提供安全性的协议。分为SSH客户端和SSH服务端。支持口令和密钥认证。

密钥认证过程:

SSH客户端可使用ssh-keygen工具生成密钥对,将公钥复制到SSH服务端/home/user/.ssh/authorized_keys文件,当SSH客户端使用私钥(~/.ssh/id_rsa)访问服务端时,服务端会将发来的私有在本机公钥匹配,如果匹配成功,则用公钥加密给客户端,客户端再用私钥进行解密,实现加密传输数据。

1、在SSH客户端创建密钥对

#ssh-keygen -t rsa #一路回车

2、在SSH服务端要远程登录的账户家目录下创建.ssh目录及设置权限

# mkdir /root/.ssh
# chmod 700 /root/.ssh

3、将公钥上传到SSH服务端并重命名为authorized.keys

# scp /root/.ssh/id_rsa.pub root@remote_ip:/root/.ssh/authorized_keys 

说明:remote_ip替换远程服务器IP,authorized_keys也可以存放多个id_rsa.pub

4、在SSH服务端启用SSH服务密钥认证

# vi /etc/ssh/sshd_config 
RSAAuthentication yes           
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no 
# service sshd restart  #重启ssh服务

5、在SSH客户端测试

# ssh root@remote_ip  

这样就可以免交互登录远程服务器,并可以执行命令:

# ssh root@remote_ip 'df -h'

二、利用expect工具自动输入用户名和密码

Expect是一个免费的编程工具语言,用于实现自动交互,而无需人工干预。
在登录时,就可以用这个工具实现自动输入用户名和密码了!
Linux系统中默认通常没有安装的,需要先安装下再使用。
CentOS安装:yum install expect
Ubuntu安装:sudo apt-get install expect

1、免交互SSH登陆远程服务器,并查看磁盘分区

#!/usr/bin/expect
set ip 192.168.1.156
set pass 123.com    
set timeout 30
spawn ssh root@$ip
expect {
   "(yes/no)" {send "yes\r"; exp_continue}
   "password:" {send "$pass\r"}
}
expect "root@*"  {send "df -h\r"}
expect "root@*"  {send "exit\r"}
expect eof

2、在Shell脚本中嵌入Expect语法

方法1:使用EOF,将内容段让expect执行

#!/bin/bash
user=root
pass='123'
ip='192.168.1.154'
/usr/bin/expect << EOF
set timeout 30
spawn ssh $user@$ip   
expect {
 "(yes/no)" {send "yes\r"; exp_continue}
 "password:" {send "$pass\r"}
}
expect "root@*"  {send "df -h\r"}
expect "root@*"  {send "exit\r"}
expect eof 
EOF

或者

#!/bin/bash
user=root
pass='123'
ip='192.168.1.154'
expect -c "
spawn ssh $user@$ip
expect {
  \"(yes/no)\" {send \"yes\r\"; exp_continue}
  \"password:\" {send \"$pass\r\"; exp_continue}
  \"root@*\" {send \"df -h\r exit\r\"; exp_continue}
 }"

方法2:将expect脚本独立出来

免交互登录脚本:

# vi login.exp     
#!/usr/bin/expect 
set ipaddress [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
if { $argc != 3 } {
puts "Usage: expect login.exp ipaddress username password"
  exit 1
}
set timeout 30
spawn ssh $username@$ipaddress
expect {
    "(yes/no)" {send "yes\r"; exp_continue}
    "password:" {send "$password\r"}
}
expect "$username@*"  {send "df -h\r"}
expect "$username@*"  {send "exit\r"}
expect eof

用户信息文件:

# vi user_info  
192.168.1.156   user    user
192.168.1.154   root    123.com

Shell脚本:读取用户信息并赋值到变量

# vi expect.sh    
#!/bin/bash
for ip in `awk '{print $1}' user_info`
do
    user=`awk -v I="$ip" '{if(I==$1)print $2}' user_info`
    pass=`awk -v I="$ip" '{if(I==$1)print $3}' user_info`
    expect login.exp $ip $user $pass
done

写好这三个文件之后,执行Shell脚本,就会按顺序执行远程服务器信息文件,并查看磁盘分区。

Expect指令说明:

set:可以设置超时,也可以设置变量。
timeout:expect超时等待时间,默认10S。
spawn:执行一个命令。
expect"":匹配输出的内容。
exp_continue:继续执行下面匹配。
\r:可以理解为回车。
a r g c : 统 计 位 置 参 数 数 量 。 [ l i n d e x argc:统计位置参数数量。 [lindex argc[lindexargv 0]:脚本后第一个参数,类似于shell中 1 , 以 此 类 推 。 p u t s : 打 印 字 符 串 , 类 似 于 S h e l l 的 e c h o 。 a w k − v I = " 1,以此类推。 puts:打印字符串,类似于Shell的echo。 awk-v I=" 1putsShellechoawkvI="ip":赋值变量。
expect{…}:输入多行记录。
其他指定说明:
timeout-1:永不超时退出。
log_file/var/log/expect.log:记录交互信息。
interact:交互后不退出远程终端,如果加要把expect “root@*” {send “exit\r”}注释掉,如果不加,就直接退出。

参考链接 :

实战 SSH 端口转发 : https://mp.weixin.qq.com/s/ALttwSmT1WB5icUm4HPsTQ

Linux安全运维进阶:SSH 无缝切换远程加密 : https://mp.weixin.qq.com/s/epVQya4DIimtd6fNP0cFwQ

Linux免交互登录远程服务器并执行命令:https://mp.weixin.qq.com/s/B2BVo2vt2lNFbwK7VeUYow

LinuxLinux安全加固脚本
cubi56517的博客
05-12 3384
#安全加固脚本 #!/bin/bash #version1.0;writeat2017-03-29; #writebyRingoo; #1.将root管理员名称修改为Ringoo useradd...
Linux安全运维进阶SSH常见配置_usage ssh [-1246aacfggkkmnnqsttvvxxyy] [-b bind_a(1)
2401_83974590的博客
05-05 649
至此,我们已经完成了本地端口转发,远程端口转发,动态端口转发以及 X 转发的介绍。回顾起来,总的思路是通过将 TCP 连接转发到 SSH 通道上以解决数据加密以及突破防火墙的种种限制。对一些已知端口号的应用,例如 Telnet/LDAP/SMTP,我们可以使用本地端口转发或者远程端口转发来达到目的。动态端口转发则可以实现 SOCKS 代理从而加密以及突破防火墙对 Web 浏览的限制。对于 X 应用,无疑是 X 转发最为适用了。
xshell公钥免密登录
最新发布
2201_75549363的博客
07-14 829
设备:一台linux系统机器,一台windows系统机器软件:xshell要求:公钥免密登录。
linux use ssh 远程登陆
01-15 820
[root@localhost lib]# ssh usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]            [-D [bind_address:]port] [-e escape_char] [-F configfile]            [-i identity_file
Linux服务器安全加固shell脚本
12-21
资深运维工程师亲自实践撰写的Linux服务器安全加固shell脚本,当然安全还要亲历亲为,不可马虎大意!
SSH命令总结
weixin_34310785的博客
10-04 96
一、SSH简介SSH(全称 Secure Shell)是一种加密的网络协议。使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息。要使用 SSH,目标机器应该安装 SSH 服务端应用程序,因为 SSH 是基于客户-服务模式的。 当你想安全的远程连接到主机,可中间的网络(比如因特网)并不安全,通常这种情况下就会使用 SSH。二、安装 SSH基于 D...
Linux与网络运维 企业面试问答题库
08-29
5. 安全管理,如防火墙(iptables)设置,SSH安全配置,以及权限策略。 第三阶段:实战篇 这一阶段更侧重于实际问题解决和故障排查,可能包括: 1. 系统性能监控,如使用vmstat、iostat、netstat等工具分析系统资源...
【PDF版本】老男孩教育Linux高端运维及云计算架构师-就业班20170513V9.pdf
06-21
根据提供的文件信息,我们可以将这份课程大纲分解为多个阶段,并从中提炼出重要的IT知识点,特别是针对Linux运维领域。下面是对各个阶段所涉及的关键知识点的详细解释: ### 第一阶段:Linux基础 - **开班课程介绍...
shll编程基础Linux进阶
03-20
在“Shell编程基础Linux进阶”这一主题中,我们探讨了如何在Linux环境中进行开发工作,包括使用Shell脚本和安装关键的开发组件。以下是详细的知识点解析: **开发环境搭建** 1. **Xshell和Xftp工具**:这两款工具...
ssh登录时在参数中加入密码的解决方案---转载
docker做了端口映射却不能访问
06-21 2323
ssh登录时在参数中加入密码的解决方案 转载(https://www.cnblogs.com/senlinyang/p/7833249.html)   在使用ssh登录远程服务器的时候,在执行完ssh user@ip后,要输入登录密码,有时候登录密码记不住,这样以来Ian带来的很多的麻烦,有没有一种在ssh的参数中直接加入密码的方法呢?查看ssh的帮助我们发现ssh命令并不能在参数中制定密码。 复...
ssh远程执行命令并自动退出
qq123aa2006的博客
03-14 413
ssh命令格式如下: usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-L [bind_address:]port:ho...
Linux常用命令笔记--远程管理
weixin_34205076的博客
03-13 284
[root@szm network-scripts]# ssh --help usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]-指定加密算法 [-D [bind_address:]port] [-e escape_char] [-F configfil...
linuxssh显示usage的错误,ssh问题小结
weixin_35057804的博客
05-13 1434
1.相同发布版本的ssh之间建立通道一般排除权限上&key换行的问题,很少会发生什么问题,但也有一些非常诡异的问题,针对这些问题我们可以使用以下两种方式来做详细的诊断。ssh客户端程序的debug模式:cmd:ssh -v [1|2|3]一般情况下ssh的客户端都可以使用-v的方式来开启debug模式,后面的num是debug的level,数字越大,debug的信息越详细。通过客户的debug可以...
安装、使用ssh服务详解
kjcxmx的博客
11-10 820
安装、使用ssh服务详解 什么是ssh? SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到...
ssh登录远程机
绯浅yousa的笔记
04-06 3681
ssh登录远程机ssh基本命令usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i i
设置ssh免密码登录服务器
红嘴奎利亚雀 的专栏
08-24 3141
本文已迁移到我的新博客地址:blog.favorstack.io,欢迎访问~ 注:本文假设你已经有一定的linux基本操作常识,所以一些细节不再赘述,仅作为思路参考记下。 本文方法在Linux发行版Ubuntu12.04LTS /12.10 Server下均已验证,其他发行版原理相同。 工作中,如果常常跟linux打交道,肯定经常需要用到ssh远程登录到服务器,毕竟跑机...
ssh的使用方法
MENGHUANBEIKE的专栏
11-09 1023
1.ssh使用命令usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
写文章

热门文章

  • Windows 未能启动。原因可能是最近更改了硬件或软件。解决此问题的步骤 199512
  • 联想电脑开机报错0190:Critical low-battery error 128070
  • 用Python读取CSV文件的5种方式 116356
  • 多媒体技术选择题 111252
  • Nginx之location详解 74878

分类专栏

  • 监控/自动化工具 付费 187篇
  • 生活/中医 付费 13篇
  • shell 付费 77篇
  • Ubuntu 付费 228篇
  • windows 132篇
  • 网络 58篇
  • 硬件/交换机/路由器/防火墙/自动化/虚拟化/rsync同步 97篇
  • 自考 68篇
  • 数据库 162篇
  • centos 244篇
  • 面试 31篇
  • Git/Svn/GitHub 23篇
  • 常见报错信息和硬件故障 34篇
  • 常用命令 73篇
  • ELK、K8S、虚拟化Docker 92篇
  • tomcat、Apache/自动化/定时任务/大数据/中间件 42篇
  • 虚拟化 4篇
  • 服务器 50篇
  • 运维 143篇
  • 转载 38篇
  • python编程 48篇

最新评论

  • centos7更换和升级JDK版本

    寰宇001: 更换yum源

  • centos7更换和升级JDK版本

    weixin_42301977: 更新yum的时候卡着不动了表情包

  • linux服务器中用U盘或者移动硬盘拷贝数据

    踩坑的菜鸟: 大哥 我也出现这个问题了,你咋解决的

  • 数据结构选择题

    weixin_42054567: 第37题选c

  • 数据结构选择题

    weixin_42054567: 第九题选C

最新文章

  • UPS电源的基本常识和注意事项
  • 存储与服务器连接配置案例分享
  • 电脑添加打印机方法/步骤
2024年2篇
2021年238篇
2020年1028篇
2019年408篇
2018年35篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码民治网页制作大芬SEO按效果付费坪地网站建设设计双龙网站排名优化罗湖关键词排名东莞网站改版大浪外贸网站建设塘坑seo排名龙华设计网站布吉网络广告推广双龙百搜标王双龙百度标王民治建站观澜seo排名横岗SEO按天收费南联设计公司网站龙岗百度标王罗湖网站优化按天扣费横岗至尊标王塘坑网站开发宝安SEO按天收费吉祥网站推广方案坂田建站永湖关键词按天收费民治网站推广罗湖网站关键词优化松岗网络广告推广坪山阿里店铺运营民治网站优化塘坑网站开发歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化