linux系列之 SSH

SSH是 Secure Shell Protocol(安全外壳协议)的简写。

服务器端口号:22

SSH有证书验证和密码验证两种方式

SSH协议在预设状态中提供了两个服务器功能:

1、一个是类似 Telnet 的远程 shell,也就是 SSH

2、一个是类似 FTP 的 sftp-server,也就是更安全的 FTP 服务

公钥和私钥的概念

1、简单的说,公钥就是给别人的,而私钥只能留给自己。

2、以自己作为客户端来说,首先你要取得服务器端的公钥,然后把自己的公钥发送给服务器端。

3、最后的结果是

客户端 = 客户端私钥 + 服务器端公钥

服务器端 = 服务器端私钥 +客户端公钥

连接过程简介

服务器端如何产生新的 ssh 公私钥

[[email protected] ~]# rm -rf /etc/ssh/ssh_host*
[[email protected] ~]# systemctl restart sshd
# 重启sshd服务即可

SSH 客户端程序

linux下直接使用 ssh 命令

[[email protected] ~]# ssh 192.168.1.1
# 以 root 用户登录,默认以当前用户登录对方SSH

[[email protected] ~]# ssh [email protected]
# 以对方 study 用户登录SSH

windows下使用

putty    http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

secureCRT   属于商业软件,可以下载破解版

x-shell    http://xshell.en.softonic.com/

SFTP

SSH是登入远程服务器,如果你想从服务器下载或上传文件,那就必须使用 sftp 或 scp。这两个指令都是使用 ssh 的通道(port 22),只是模拟成 FTP 与复制的动作。

[[email protected] ~]# sftp [email protected]
  Connecting to localhost...
  [email protected]‘s password:    <== 输入密码
  sftp> exit   <== 输入 ftp 相关指令
针对服务器的操作
显示当前目录 pwd
改变当前目录 cd
列出当前目录下文件 ls
建立目录 mkdir
删除文件 rm
改变文件群组 chgrp
改变文件拥有者 chown
改变文件权限 chmod
改变文件名 rename
针对本地的操作
显示本地当前目录 lpwd
改变本地当前目录 lcd
列出本地当前目录下文件 lls
在本地建立目录 lmkdir
针对文件 上传/下载 的操作
将本地文件上传至服务器
put [本地目录或文件] [远程]

put [本地目录或文件]

这种格式会上传至服务器当前目录

从服务器下载文件至本地
get [远程目录或文件] [本地]

get [远程目录或文件]

这种格式会下载到本地当前目录

get *

get *.rpm

这种格式也可以

windows下工具

下载地址:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

psftp> open 192.168.1.1
login as: root
[email protected]‘s password:
Remote working directory is /root
# 该软件通过 open 打开远程主机

SCP

通常使用 sftp 是因为可能不知道服务器上面有什么文件名的文件存在,如果已经知道服务器上的文件名称后,那么最简单的文件传输则是通过 scp 这个指令。

windows下工具下载地址:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

[[email protected] ~]# scp [-pr] [-l 速率] file [帐号@]主机:目录名   《==上传
[[email protected] ~]# scp [-pr] [-l 速率] [帐号@]主机:file 目录名   《==下载
选项:
  -p : 保留原本文件的权限数据
  -r : 复制来源为目录时,可以包含子目录
  -l : 限制传输的速度,单位为 Kbits/s ,比如 [-l 800] 代表传输速率限制为 100Kbytes/s
  
[[email protected] ~]# scp /etc/hosts* [email protected]:~
[email protected]‘s password:    <==输入 student 密码
# 将本机的 /etc/hosts* 全部复制到 192.168.1.1 上 student 用户的家目录下

[[email protected] ~]# scp [email protected]:/etc/bashrc /tmp
# 将 192.168.1.1 远程主机下的 /etc/bashrc 复制到本机的 /tmp 目录下

1、如果服务器重新安装或者公钥发生改变,假设服务器使用相同的IP,造成相同IP的服务器公钥不同,该如何解决?(操作在客户端)

[[email protected] ~]# ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middleattack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
a7:2e:58:51:9f:1b:02:64:56:ea:cb:9c:92:5e:79:f9.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:1 <==有问题的数据行号
RSA host key for localhost has changed and you have requested strict checking.
Host key verification failed.

# 上面那句话告诉你:/root/.ssh/known_hosts 的第 1 行,上次的公钥与本次收到的公钥结果不同
# 方法:vim /root/.ssh/known_hosts,并将第 1 行删除,再重新 ssh 连接就可以了

2、如何不输入密码建立 SSH 连接?(操作在客户端)

 1.客户端生成本地公私钥

ssh-keygen   //本地生成RSA公钥和私钥,执行成功后会在当前用户家目录 .ssh/ 下生成 id_rsa(私钥)和 id_rsa.pub(公钥)

[[email protected] ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  <==按enter
Enter passphrase (empty for no passphrase):   <==按enter
Enter same passphrase again:   <==按enter
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
24:6e:f2:c7:b6:2c:b1:4c:df:8a:31:e8:07:eb:78:20 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|      . .        |
|     . o         |
|    . o S        |
|E . .=o.         |
| . ..=+++.       |
|   oo =B...      |
|  .oo...+.       |
+-----------------+


 2.将本地公钥拷贝至目标主机(服务器端)并连接

ssh-copy-id   //将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利

ssh-copy-id 10.0.0.11   //导出 id_rsa.pub(公钥),连接对方并将公钥传至对方服务器

ssh-copy-id [email protected]   //则将公钥导出至10.0.0.11的root用户.ssh目录下

ssh-copy-id [email protected]    //则将公钥导出至10.0.0.11的student用户.ssh目录下

[[email protected] ~]# ssh-copy-id 10.0.0.11
The authenticity of host ‘10.0.0.11 (10.0.0.11)‘ can‘t be established.
ECDSA key fingerprint is c9:77:ee:3f:f6:82:25:66:0b:85:d8:d1:46:59:8f:ef.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]‘s password:        <==输入目标主机root用户密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh ‘10.0.0.11‘"
and check to make sure that only the key(s) you wanted were added.

[[email protected] .ssh]# ssh 10.0.0.11
Last login: Fri Feb  5 23:48:56 2016 from 10.0.0.129
[[email protected] ~]#
# 成功,不再需要输入密码
# 其实,当前 root 用户通过 ssh-keygen 生成的本地公私钥不仅仅 root 用户可以用,其他本地用户也可以。
# 假设本地还有一个叫做 hello 的用户,我想通过 hello 用户连接到远端的 root 用户和 student 用户也不需要密码。
[[email protected] /]# mkdir /home/hello/.ssh
[[email protected] /]# cp /root/.ssh/id_rsa /home/hello/.ssh/
[[email protected] /]# chown -R hello:hello /home/hello/.ssh
[[email protected] hello]# su - hello

[[email protected] ~]$ ssh [email protected]
The authenticity of host ‘10.0.0.11 (10.0.0.11)‘ can‘t be established.
ECDSA key fingerprint is c9:77:ee:3f:f6:82:25:66:0b:85:d8:d1:46:59:8f:ef.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.0.0.11‘ (ECDSA) to the list of known hosts.
Last login: Sat Feb  6 00:00:15 2016 from 10.0.0.129
[[email protected] ~]#
# 成功!hello 用户登录到对方 root 用户

3、通过证书验证安装一个后门的思路

#一般来说,SSH会在用户的家目录 .ssh/ 下有以下四个文件:
[[email protected] .ssh]# ls
authorized_keys id_rsa  id_rsa.pub  known_hosts
# authorized_keys 服务器端上记录通过证书验证连接进来的客户端公钥
# id_rsa 客户端本地的私钥
# id_rsa.pub 客户端本地的公钥
# known_hosts 客户端记录的服务器端的公钥

# 通过以下命令即可实现无密码登录
[[email protected] ~]# ssh-keygen
# 生成客户端本地公私钥
[[email protected] ~]# ssh-copy-id [email protected]
# 输入 ssh-copy-id 命令后还是需要输入服务器端用户的密码的
# 将客户端的公钥导出到 10.0.0.11 的 root 的家目录下的 .ssh/authorized_keys 文件里

# 故可通过其他方式(比如物理接触),将生成的客户端公钥拷贝至 root 的家目录下的 .ssh/authorized_keys 文件里,这样便能实现远程无密码登录

4、如何发现当前远程登录用户剔除并去除隐患(操作在服务端)

[[email protected] ~]# who 或 w
root     tty1         2016-02-05 21:56
root     pts/0        2016-02-06 00:27 (10.0.0.2)
root     pts/1        2016-02-06 00:35 (10.0.0.129)
# 假设root从 pts/1 这个入口非法登录

[[email protected] ~]# pkill -kill -t pts/1
# 杀死pts/1远程登录进程(相当于踢掉远程登录的非法用户)

# 但是仅仅踢掉是不够的,假设非法登录是通过上面的证书验证方式
[[email protected] ~]# cd .ssh
[[email protected] .ssh]# vim authorized_keys
#  这里可能不仅仅在 root 的家目录下有 authorized_keys 文件,最好把 /home/ 目录下所有用户的家目录都检查一遍

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3WTJS0riNqh8AW06s7CiXiZ+QAdeYmdsHUNxkR+8BgYbamHuy7v27nKHdT9909zPruu/JIJLgNZx2ZgtbRQMgUUWma+gHBtE1GY7hdn/sRc5nBxEnpC+go2/RIC5oBO+Ly17Eg7TnepM7QZNA4Uq5nx+CxFsEy4eM75p9DP78nP+8ZRdJkiXsQAD95teGxQDe8ckrYokwLUfXbk9Q1mwbrfNGC2nR2i5AzxOvdo//YkYX9xydUIB2YM27KE/o9WEBR7/K6iPPFi7Cv5mvRX85+kyCN8RpkReuiLA+LDmGbB3z2OfQsVtbfFxW+2q1vhPuuhl8KJStR7zMEjDFmBfb [email protected]

# 删除该条记录即可,即为删除非法公钥

5、SSH 服务端简单设置(操作在服务端)

[[email protected] ~]# vim /etc/ssh/sshd_config

PermitRootLogin no   禁止root用户连入SSH
PasswordAuthentication no   禁止通过密码验证,即输入用户名后不会出现输入密码的框

6、一个更安全的 SSH 登录方式

# 假设有两台主机,第三方想要通过 SSH 登录到你的重要主机上,必须先经过跳板主机,通过跳板主机才能到达重要主机。

# 假设重要主机的 IP 地址为192.168.1.1,且存在 root 和 student 两个用户。
# 假设跳板主机有两张以上的网卡,并在一个无线局域网的环境里(与重要主机相互隔离的网段),该局域网内只有跳板主机自己。
# 第三方先通过连接至跳板主机所在的局域网,进入无线局域网,然后连接到跳板主机,通过跳板主机中转,最终到达重要主机。

# 思路如下:
1、跳板主机生成密码
ssh-keygen

2、跳板主机以 student 用户连入重要主机
ssh-copy-id [email protected]
# 这里会要求输入一次 student 用户的密码

3、修改重要主机的配置
vim /etc/ssh/sshd_config
 PermitRootLogin no
 PasswordAuthentication no
# 禁止重要主机的 root 用户登录,禁止通过密码验证

4、重启服务
systemctl restart sshd

5、结果
 1)第三方首先得连入跳板主机所在的局域网
 2)连入跳板主机所在的局域网后,还需要跳板主机的 root 用户权限
# 这里更复杂的做法是:禁止跳板主机的 root 用户登录,以其他用户登录后再 su - 切换为 root
 3)获取到跳板主机的 root 用户权限后,使用 root 用户是无法登录到重要主机的,只能通过 student 用户登录,student 用户由于已经传递了公钥,所以是不需要密码的,且这里也无法通过密码验证。
 4)获得 student 用户的权限后,再通过 su - 切换成 root 用户,这里需要重要主机的 root 密码
时间: 2024-10-27 05:04:12

linux系列之 SSH的相关文章

使用kernel编译+busybox定制Linux系统--实现ssh远程登录+web服务的迷你主机

在运维工作中很多时候我们需要裁剪Linux系统,减少系统性能的消耗,提升系统服务的性能,以往通过光盘安装的Linux都是比较臃肿的,但出现这样的需求后,我可以对Linux进行重新编译再busybox工具移植即可实现,接下来我们一步一步实现kernel编译+busybox定制Linux系统--实现ssh远程登录+web服务: 实现过程如下: 一.规划子主机的磁盘存储规划 1.添加一个大小为10G的硬盘 2.查询系统硬件信息参数: # lspci  00:00.0 Host bridge: Inte

kali linux 系列教程之metasploit 连接postgresql可能遇见的问题

kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂   目录 kali linux 下metasploit 连接postgresql可能遇见的问题................................ 1 前言............................................................................................................... 1

Linux 配置双机SSH信任

Linux 配置双机SSH信任 一.实现原理 使用一种被称为"公私钥"认证的方式来进行ssh登录."公私钥"认证方式简单的解释是: 首先在客户端上创建一对公私钥(公钥文件:~/.ssh/id_rsa.pub:私钥文件:~/.ssh/id_rsa),然后把公钥放到服务器上(~/.ssh/authorized_keys),自己保留好私钥.当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了. 二.实验环境 A机:TS-DEV/10.0.

linux中修改ssh端口和禁止root远程登陆设置

linux中修改ssh端口和禁止root远程登陆设置 查看下系统版本 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.7 (Final) 修改配置文件 linux修改端口22vim /etc/ssh/sshd_config找到#port 22将前面的#去掉,然后修改端口 port 1234重启服务就OK了service sshd restart或/etc/init.d/ssh restart为增强安全先增加一个普通权

[Linux] PHP程序员玩转Linux系列-lnmp环境的搭建

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 在平常的工作中,我作为PHP程序员经常要搭建一下环境,这个环境就是Linux系统下安装nginx,php,mysql这三个软件,对软件进行配置,然后在浏览器上能够正常打开运行查看项目.CentOS中安装软件有好几种方式,我经常用的是包安装方式,因为这种非常简单一句命令就能安装成功,这也是与windows下安装软件最大的不同点.包安装方式就一个关键单词就是yum. 解决找不到nginx包的问题 我先安装一下web服务器nginx,按好这

Linux系统下ssh登陆很慢的解决办法

Linux系统下ssh登陆很慢怎么办?很多的Linux用户发现连接上Linux服务器在输入用户名之后还要再等一下才能输入密码,时间过长了,现在小编与大家分享一下如何解决ssh登陆问题的问题,需要的朋友可以参考下 很多的Linux用户发现连接上Linux服务器在输入用户名之后还要再等一下才能输入密码,时间过长了,现在小编与大家分享一下如何解决ssh登陆问题的问题,希望对您有所帮助 . 1.我们平时登陆Linux服务器的时候,都需要在输入用户名之后再等待一下,这个时间因不同而等的时间不一样. 2.其

[Linux] PHP程序员玩转Linux系列-使用supervisor实现守护进程

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 7.PHP程序员玩转Linux系列-nginx初学者引导 8.PHP程序员玩转Linux系列-Nginx中的HTTPS 首先遇到的问题

Linux主机间ssh实现无密码登陆

server1    主机名:centos6         IP:192.168.2.105        操作系统:centos6.5 server2    主机名:rhel6             IP:192.168.2.110        操作系统:rhel6.5 为了实现server1对server2能够实现无密码登陆,可以在server1主机上使用ssh-keygen工具生成一对密钥,server1保留私钥,将公钥上传至server2主机相应用户的主目录下的.ssh/文件夹下,

linux远程登录ssh免密码

原文链接,感谢原作者. (一)问题: 假如我们现在有两台机器:ServerA和ServerB,现在想要让ServerA不用输入密码就能够进行访问. (二)方法和原理: 我们使用ssh-keygen在ServerA上生成private和public密钥,将生成的public密钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上. 在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法[默认是DSR算法],该工具做