Linux操作系统如何使用SSH命令连接另外一台Linux服务器

前言

1、linux服务器下一般都会安装ssh服务ssh服务可以建立安全的远程连接,方便日常通过一台linux设备维护其他的服务器设备。

2、SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
3、SSH之所以能够保证安全,原因在于它采用了公钥加密。整个过程是这样的:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

安装SSH服务

1、如果你用的是redhat,fedora,centos等系列linux发行版,那么敲入以下命令:
sudo yum install sshd 或
sudo yum install openssh-server(由osc网友 火耳提供)
 
2、如果你使用的是debian,ubuntu,linux mint等系列的linux发行版,那么敲入以下命令:
sudo apt-get install sshd 或
sudo apt-get install openssh-server(由osc网友 火耳提供)
 
然后按照提示,安装就好了。

由于本机在之前就已经安装好了SSH服务,所以提示如下:

开启SSH服务

service sshd start

执行命令结果如下:

卸载SSH服务

1、如果你用的是redhat,fedora,centos等系列linux发行版,那么敲入以下命令:
yum remove sshd
2、如果你使用的是debian,ubuntu,linux mint等系列的linux发行版,那么敲入以下命令:
sudo apt-get –purge remove sshd

执行命令结果如下:

Linux操作系统从一台服务器SSH远程连接至另一台服务器

示例1

直接连接远程主机端口

前提条件:

两台服务器A、B;当前所在位置:服务器A;SSH服务已安装。

判断:

在服务器A中执行命令 ping B的IP地址 ,在能ping通的前提条件下

进入服务器A后,输入:

ssh -l 主机名 IP
  1. 主机名:要跳转的Linux服务器的主机名
  2. IP:要跳转的Linux服务器的ip地址

或者:

ssh 用户名@服务器地址

然后回车输入服务器B的用户密码就可以跳转到另一台服务器B。如 ssh root@127.0.0.1 

示例2

1、假定你要以用户名user,登录远程主机host,只要一条简单命令:

$ ssh username@remote_host 
如:ssh pika@192.168.0.111

2、如果本地主机用户名与远程主机用户名一致,登录时可以省略用户名:

$ ssh remote_host 
如:ssh 192.168.0.111

3、SSH服务的默认端口是22:你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。(指定端口连接)

ssh username@remote_host -p 2222
如:$ ssh user@host -p 2222   该条命令表示,ssh直接连接远程主机的2222端口。

4、第一次登录远程主机:

如果你是第一次登录对方主机

$ ssh root@12.18.429.21

系统会出现下面的提示::

The authenticity of host 'host (12.18.429.21)' can't be established.

RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.

Are you sure you want to continue connecting (yes/no)?

这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。

很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。

假定经过风险衡量以后,用户决定接受这个远程主机的公钥。

Are you sure you want to continue connecting (yes/no)? yes

系统会出现一句提示,表示host主机已经得到认可。

Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

然后,会要求输入密码。

Password: (enter password)

如果密码正确,就可以登录了。

当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

示例3

1、使用密码登录,用户每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。

2、所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
3、这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用 ssh-keygen 命令生成一个:
运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。

运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。 

4、这时再输入下面的命令,将公钥传送到远程主机host上面:

$ ssh-copy-id user@host

好了,从此你再登录,就不需要输入密码了。

5、如果还是不行,就打开远程主机的 /etc/ssh/sshd_config 这个文件,检查下面几行前面"#"注释是否取掉。

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

然后,重启远程主机的ssh服务:

// ubuntu系统

service ssh restart

// debian系统

/etc/init.d/ssh restart

示例4

通过密钥连接:

ssh -i path/to/key_file username@remote_host

示例5

ssh跳板:通过跳板机器连接远程主机;多个跳板使用逗号隔开

ssh -J username@jump_host username@remote_host

实例

本实例的客户端和服务端均为Ubuntu操作系统。

ssh客户端:

用户名(user_name): alpha
IP地址(client_ip): 192.168.0.33

ssh服务端:

用户名(user_name): omega
IP地址(server_ip): 119.9.90.190

ssh服务器远程登录

1 普通登录: ssh user_name@server_ip

[alpha@客户端] :~$ ssh omega@119.9.90.190
输入omega@119.9.90.190的密码:
loading omega@119.9.90.190 ...
welcome!
[omega@服务端] :~$ 

2 免ip登录: ssh Host

2.1 客户端alpha用户进入隐藏ssh目录
[alpha@客户端] :~$ cd ~/.ssh
[alpha@客户端] :~/.ssh$ pwd
/home/exia/.ssh 
2.2 新建/修改config文件: sudo vim config

config文件单元构成:

Host: 登录名
----HostName: 将要登录ssh服务器ip
----User: 将要登录服务器用户名
----Port: 将要登录服务器端口

config文件中可以设置多个Host:

[alpha@客户端] :~$ cat config
Host omi
    HostName 119.9.90.190
    User omega
    Port 22

Host theroot
     HostName 119.9.90.190
    User root
    Port 22
2.3 实现免ip登录
[alpha@客户端] :~$ ssh omi

输入omega@119.9.90.190的密码:
loading omega@119.9.90.190 ...
welcome!

[omega@服务端] :~$ 

3 免密登录: ssh -i id_rsa Host 和 ssh Host

3.1 客户端alpha用户进入隐藏ssh目录
3.2 生成ssh登录密钥与公钥(若之前未生成) 
[alpha@客户端] :~/.ssh$ ls
config
[alpha@客户端] :~/.ssh$ ssh-keygen
[alpha@客户端] :~/.ssh$ ls
config  id_rsa  id_rsa.pub
3.3 将公钥发送给需要免密登录的服务器的用户
[alpha@客户端] :~/.ssh$ ssh-copy-id omega@119.9.90.190;echo "ssh-copy-id omi 也行"
ssh-copy-id omi 也行
[alpha@客户端] :~/.ssh$ echo "开始免密登录"
# 开始免密登录
[alpha@客户端] :~/.ssh$ 
[alpha@客户端] :~/.ssh$ 
[alpha@客户端] :~/.ssh$ ssh -i id_rsa omi
loading omega@119.9.90.190 ...
welcome!

[omega@服务端] :~$ cd ~/.ssh
[omega@服务端] :~/.ssh$ ls
authorized_keys

此时,[omega@服务端] :~/.ssh/authorized_keys 中已经存放了[alpha@客户端] :~/.ssh/id_rsa.pub中的公钥了。

当然直接打开[alpha@客户端] :~/.ssh/id_rsa.pub 将其中的内容复制粘贴到 [omega@服务端] :~/.ssh/authorized_keys 中最后一行也是可以的。

3.4 最后, 在config文件中各Host的最后添加IdentityFile ~/.ssh/id_rsa:
[alpha@客户端] :~$ cat config
Host omi
    HostName 119.9.90.190
    User omega
    Port 22
    IdentityFile ~/.ssh/id_rsa

Host theroot
     HostName 119.9.90.190
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa

即可进一步简化ssh远程登录命令:

[alpha@客户端] :~/.ssh$ ssh omi
loading omega@119.9.90.190 ...
welcome!

[omega@服务端] :~$ 

如果服务端相应免密用户的密码或是用户名有更改, 需要对客户端中对应用户~/.ssh下:

(1)修改config中Host的信息
(2)删除known hosts文件

 

 

补充1:不用输入ssh -i命令行即可携带pem文件快速登录的方法

1、如果要登录的Linux服务器只允许pem认证。

ssh -i ~/.ssh/id_rsa.pub azureuser@10.111.12.123

其中的  -i  选项表明,选择一个和公钥匹配的私钥文件路径。默认是~/.ssh/id_rsa。

2、但是每次输入 ssh -i xxxx.pem 用户@ip 地址   就很烦。

3、有个一劳永逸的方法:

进入到自己的用户目录,例如/home/me

把.pem文件放在当前目录

然后vi .ssh/config

内容如下:

Host *
      ServerAliveInterval 60
  Host denglu
      HostName 你的ip
      User mojie
      IdentityFile    ~/.ssh/你的pem文件名.pem

保存后,更改权限: sudo chmod 600 key.pem  

然后在当前目录/home/me下输入  ssh denglu

即可登录到目标服务器。再也不用每次输入长长的命令了

补充2:Linux操作系统中的路径符号

补充3: exit 退出远程连接服务器,回到本机的命令终端

 

 

 

文章主要转载自:https://www.jianshu.com/p/10023495fba9

posted @ 2022-04-18 09:42  习久性成  阅读(36477)  评论(0编辑  收藏  举报