远程登录控制与ssh

一.SSH服务

1.什么是SSH服务器?

  • SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。

  • SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。

  • 对数据进行压缩,加快传输速度。

  • SSH使用传输层TCP协议的22号端口

2. SSH的优点

  • 数据传输是加密的,可以防止信息泄漏

  • 数据传输是压缩的,可以提高传输速度

3.常见的ssh协议

客户端软件:

  • Linux 客户端: ssh, scp, sftp,slogin
  • Windows 客户端:xshell, MobaXterm,putty, securecrt, ssh secure shell client

服务端软件:

  • 软件名sshd,闭源。
  • 软件名openssh,服务名sshd。CENTOS 7默认安装的是这个软件包。

OpenSSH软件包

  • 服务名称:sshd

  • 服务端主程序:/usr/sbin/sshd

  • 服务端配置文件:/etc/ssh/sshd_config

  • 客户端配置文件:/etc/ssh/ssh.config

4.ssh原理

  • 客户端发起链接请求
  • 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
  • 客户端生成密钥对
  • 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
  • 客户端发送加密值到服务端,服务端用私钥解密,得到Res
  • 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)。
  • 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密。

二.登录

登录方式一:

ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port

-p:指定端口号(默认多端口号为22一般情况下不需要加此选项

举例:

ssh连接时直接跟命令,连接后命令立即生效。例如跟 ls 命令:

2.1known_hosts 文件

ssh会把每个你访问过的服务端的公钥(public key)都记录在known_hosts 文件中。 同时服务端也会记录客户端的公钥。

文件位置:~/.ssh/known_hosts

known_hosts 文件的作用:

A通过ssh首次连接到B,B会将公钥1(host key)传递给A,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。。

举例:

客户端:192.168.37.100

服务端:192.168.37.101

  • 客户端首次连接服务端时,系统会询问是否交换公钥,进行安全确认。确认连接后,双方的known_hosts文件都会记录对方的公钥。
  • 客户端的 known_hosts 文件会记录服务端的公钥。

三.sshd服务端配置

sshd服务端配置文件:/etc/ssh/sshd_config

服务监听选项:

  • 端口号、协议版本、监听IP地址
  • 禁用反向解析

常用参数:

举例:

修改端口号,将默认端口22修改为其他端口号

四.sshd客户端配置

4.1sshd服务支持登录验证方式

密码验证: 以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。

密钥对验证: 要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。

  • 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
  • 不能根据一个密码来推算出另一个密钥;
  • 公钥对外公开,私钥只有私钥的持有人才知道。

服务端配置文件的常用选项设置

4.2客户端配置文件:/etc/ssh/ssh_config

客户端首次连接服务端时,系统询问是否交换公钥,进行安全确认。这是由客户端配置文件默认的,可以修改配置文件ssh_config取消询问。

注:这种做法适合在安全环境,如果在外网情况下,不建议这么做,比较危险。

4.3限制登录用户(黑白名单)

4.4 sftp命令

SFTP是SSH File Transfer Protocol的缩写,安全文件传送协议。SFTP与FTP有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

远程下载或上传

命令格式:sftp 登录用户@远程主机IP地址

不加用户的话默认为root

get:下载

put:上传

put -r:上传文件夹

举例:

sftp和ftp的区别:

  • 连接方式:FTP使用TCP端口21上的控制连接建立连接。而,SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。

  • 安全性:SFTP使用加密传输认证信息和传输的数据,所以使用SFTP相对于FTP是非常安全。

  • 效率:SFTP这种传输方式使用了加密解密技术,所以传输效率比普通的FTP要低得多。

五.免密码登录

5.1 sshd服务支持登录验证方式

  • 密码验证: 以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。

  • 密钥对验证: 要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。

    • 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
    • 不能根据一个密码来推算出另一个密钥;
    • 公钥对外公开,私钥只有私钥的持有人才知道。

5.2 设置免密码登录

免密码原理流程:

  • 首先在客户端生成一对密钥(ssh-keygen)。
  • 并将客户端的公钥ssh-copy-id 拷贝到服务端。
  • 当客户端再次发送一个连接请求时,包括ip、用户名。
  • 服务端得到客户端的请求后,会到 authorized_keys 文件中查找,如果有相应的IP和用户,就会随机生成一个字符串,例如:kfc。
  • 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端。
  • 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端。
  • 服务端接收到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就进行免密码登录。

举例:

六.轻量级自动运维工具pssh

  • pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具。
  • pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程主机上的命令。 可使用几种不同的远程shell服务,包括rsh,Kerberos IV和ssh。
  • mussh:Multihost SSH wrapper,是一个shell脚本,允许使用命令在多个主机上通过ssh执行命令。 可使用ssh-agent和RSA/DSA密钥,以减少输入密码。

pssh 命令选项如下:

-H:主机字符串,内容格式"[user@]host[:port]"

-h file:主机列表文件,内容格式"[user@]host[:port]"

-A:手动输入密码模式

-i:每个服务器内部处理信息输出

-l:登录使用的用户名 -p:并发的线程数【可选】

-o:输出的文件目录【可选】

-e:错误输出文件【可选】

-t:TIMEOUT 超时时间设置,0无限制【可选】

-O:SSH的选项

-P:打印出服务器返回信息

-v:详细模式

--version:查看版本

配置举例

相关推荐
Dola_Pan1 小时前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
城南云小白3 小时前
Linux网络服务只iptables防火墙工具
linux·服务器·网络
咩咩大主教3 小时前
C++基于select和epoll的TCP服务器
linux·服务器·c语言·开发语言·c++·tcp/ip·io多路复用
Flying_Fish_roe3 小时前
linux-网络管理-网络配置
linux·网络·php
FuLLovers3 小时前
2024-09-13 冯诺依曼体系结构 OS管理 进程
linux·开发语言
xuanyu224 小时前
Linux常用指令
linux·运维·人工智能
有时间要学习5 小时前
Linux——应用层自定义协议与序列化
linux·服务器·网络
阑梦清川5 小时前
简明linux系统编程--互斥锁--TCP--UDP初识
linux·udp·tcp·互斥锁·信号·解锁·加锁
hardStudy_h5 小时前
Linux——常用系统设置和快捷键操作指令
linux·运维·服务器
XF鸭6 小时前
TCP 和 UDP 协议的区别?
linux