SSH协议实现了与telnet服务类似的远程登录功能,由于telnet在网络上不是很安全,SSH协议在网络中使用密文传输数据,所以现在已成为telnet的替代产品。SSH协议在网络中传输的任何数据都进行加密处理,而telnet协议是以明文的方式在网络中传输,包括用户登录时输入的用户口令,这样很容易被黑客捕获到。相比之下,SSH比telnet安全多了。

1.安装

环境:Ubuntu 12.04

服务器端:$ sudo apt-get install ssh openssh-server ssh-import-id

客户端: $ sudo apt-get install openssh-client

2.配置

2.1 修改服务器端ssh端口

默认的ssh端口是22,太扎眼,建议改成别的端口,比如3305

$ sudo vim  /etc/ssh/sshd_config ,将其中的 port 22 改成
port 3305
改完要重启ssh服务:$ sudo /etc/init.d/ssh restart(可通过命令:ps -e | grep ssd查看ssh是否已经运行)

2.2 服务器端开机自动启动 ( 安装后默认地已经以openssh-daemon在后台运行了,开机后也会自动以openssh-daemon在后台运行,可通过ps -e | grep ssh查看。 也可以使用chkconfig来设置自动启动。)

3.远程登录

一般登录ssh服务器的方式有两种:

一是基于口令的安全认证,与telnet类似,提供正确的用户口令后就可以远程登录服务器,但口令和数据在传输过程中都会被加密。

二是基于密钥的安全认证,使用公钥和私钥的方式对用户进行认证。

3.1 使用密码口令登录

在客户端,执行以下命令登录ssh服务器:

$ ssh  jim@192.168.1.103  -p 3305 ,jim为server端的用户名,192.168.56.101为服务端IP,3305为端口号

ssh jim@192.168.1.103 -p3305
jim@192.168.1.103's password:  (输入服务器端的登录密码)
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic-pae i686)
 * Documentation:  https://help.ubuntu.com/
322 packages can be updated.
103 updates are security updates.
Last login: Mon Jan 14 12:26:19 2013 from ubuntu-2.local
 * Starting OpenBSD Secure Shell server sshd                                  

Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
                                                                                     [ OK ]

看到类似这些信息就说明登录成功了。这种方式比较简单,但安全性稍差。

另外,初次登录服务器时会出现许多信息,这是因为ssh不能识别这台服务器主机,输入yes后将会把这台服务器的信息写入~/.ssh/known_hosts文件,下次登录时就不会出现这样的信息。

退出登录,只需在客户端执行 exit 命令即可

3.2 公钥-私钥登录

第一步:生成SSH用户的公钥和私钥对文件

在 client 端执行:$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/lu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):  #这里输入私钥密码,直接回车表示私钥密码为空
Enter same passphrase again:
Your identification has been saved in /home/lu/.ssh/id_rsa.
Your public key has been saved in /home/lu/.ssh/id_rsa.pub.
The key fingerprint is:
da:ff:bf:3c:a8:fe:cc:f7:ba:74:8a:37:b2:b0:77:7a lu@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|        S        |
|       o         |
|      . . .  .. .|
|         . =++Eo |
|         .==OXBB.|
+-----------------+
查看~/.ssh目录,会生成id_rsa、id_rsa.pub ,id_rsa是私钥文件需要严格保密,id_rsa.pub是公钥文件,可发布到SSH服务器中。通常需要修改客户端id_rsa.pub属性为600,否则会出现:

Permissions 0644 for ‘/home/lu/.ssh/id_rsa’ are too open. 等错误提示

第二步:上传公钥

在client端执行:$ ssh-copy-id  "-p 3305 -i ~/.ssh/id_rsa.pub jim@192.168.1.103"

将SSH客户的公钥添加到SSH服务器中用户的认证文件中,这样当登录server时,client会向server提出请求,用私钥认证,server收到请求后,寻找公钥进行身份认证。

可以把私钥理解成一把钥匙, 公钥理解成这把钥匙对应的锁头,把锁头(公钥)放到想要控制的server上, 锁住server。只有拥有钥匙(密钥)的人。才能打开锁头。 进入server并控制。而对于拥有这把钥匙的人。还必需知道钥匙本身的密码,才能使用这把钥匙 (除非这把钥匙没设置密码),这样就可以防止钥匙被盗了(私钥被人复制)。

Warning: Identity file ~/.ssh/id_rsa.pub not accessible: No such file or directory.
Enter passphrase for key '/home/jim/.ssh/id_rsa':
jim@192.168.1.103's password:  # 这里输入SSH服务器的登录密码
Now try logging into the machine, with "ssh '-p 3305 -i ~/.ssh/id_rsa.pub jim@192.168.1.103'", and check in:
  ~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

上传成功,查看服务器端 ~/.ssh/目录会生成authorized_keys文件。

第三步:登录 ssh server

在client端:$ ssh -p 3305 -i ~/.ssh/id_rsa  jim@192.168.1.103,采用私钥认证

Enter passphrase for key '/home/lu/.ssh/id_rsa': # 这里输入前面设置的私钥
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic-pae i686)
 * Documentation:  https://help.ubuntu.com/
322 packages can be updated.
103 updates are security updates.
Last login: Mon Jan 14 15:19:44 2013 from ubuntu-2.local
 * Starting OpenBSD Secure Shell server sshd                                                  

Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
                                                                                                 [ OK ]

如果在生成密钥对时指定私钥为空,则不用输入私钥即可登录成功

私钥和公钥是成对的,如果把公钥上传给server后再用ssh-keygen -t rsa命令生成一个新的私钥代替原来的私钥,就算私钥密码相同,则新的私钥依然不能用来验证server上的公钥。也就是说私钥和公钥必须是成对的。

看一下客户端本地的.ssh目录有这么几个文件:

id_rsa    // 这是私钥
id_rsa.pub   // 这是公钥
known_hosts   // 这是你所有访问过的ssh服务器的公钥信息,如果没有这个文件的话,下次登录时会提示信息

4. client端和server端实现文件拷贝

4.1 Linux下使用scp命令

把文件从server端拷到本地:$ scp  -P 3305  -r jim@192.168.1.103:/home/jim/test/t.cpp  ./

把文件从本地拷到server端:$ scp -P 3305  -r ./t.txt  jim@192.168.1.103:/home/jim/test/

4.2 Linux下使用rsync命令

如果使用rsync默认端口号873:

把文件从server端拷到本地:$ rsync -v -u -a --delete --rsh=ssh --stats jim@192.168.1.103:/home/jim/test/t.cpp  ./

把文件从本地拷到server端:$ rsync -v -u -a --delete --rsh=ssh --stats ./t.txt jim@192.168.1.103:/home/jim/test/

如果不使用rsync默认端口号则会出现问题,解决办法:

server ---> 本地:$ rsync -v -u -a --delete --rsh=ssh -e "ssh -p 3305"  --stats  jim@192.168.1.103:/home/jim/test/t.cpp  ./

本地 ---> server:$ rsync -v -u -a --delete --rsh=ssh -e "ssh -p 3305"  --stats ./t.txt  jim@192.168.1.103:/home/jim/test/

5. windows下访问ubuntu ssh server

工具:putty

如果使用密码口令登录:

打开putty,设置好ssh server的IP和端口号后,在 Window ---> Translation下选择Remote charcater set:UTF-8,否则打开的终端界面如果有汉字会出现乱码。

然后输入用户名、密码即可。

如果使用私钥登录:

首先,我们需要将 id_rsa 文件转化为 Putty 支持的格式。这里我们需要利用 Puttygen 这个工具:

点击 Puttygen 界面中的 Load 按钮,选择 id_rsa 文件,这个私钥必须与ssh上的某个公钥成对,然后输入私钥密码(如果有的话)

再点击 Save private key 按钮,输入文件名 putty_id_rsa,保存类型为ppk。这样 Putty 接受的私钥就做好了。

打开 Putty,在 Session 中输入服务器的 IP 地址、端口号,在 Connection ---> SSH ---> Auth 下点击 Browse 按钮,选择刚才生成好的私钥。

如果在生成 putty_id_rsa.ppk 的时候输入了密码,即私钥是加密的,那么点击open 就可以使用私钥登录而不用使用密码。

如果在生成 putty_id_rsa.ppk 的时候没有输入密码,即私钥没有加密,那么可以在 putty.exe 的 Connection ---> Data 的 Auto-login username 中输入私钥的用户(ssh server 的用户名),然后点击 open 就可以自动登录。

相关文章:

  • 2021-05-22
  • 2021-06-25
  • 2021-07-20
  • 2021-04-14
  • 2022-02-19
  • 2021-10-10
  • 2021-11-27
  • 2022-12-23
猜你喜欢
  • 2021-09-17
  • 2022-12-23
  • 2022-01-22
  • 2021-10-03
  • 2021-09-07
  • 2021-11-18
相关资源
相似解决方案