远程联机服务SSH

1 远程联机服务器

远程联机服务器在提供你由远程透过文字或图形接口的方式来登入系统, 让你在远程的工作机前面登入 Linux 主机以取得可操控主机之接口 (shell),而登入后的操作感觉上就像坐在系统前面一样。

  • 联机服务器的功能作用之一:分享 Unix Like 主机的运算能力
  • 服务器类型 (Server) :有限度的开放联机
  • 工作站类型 (Workstation) :只对内网开放

2 有哪些可供登入的类型?

  • 文字接口明码: telnet, rsh 等为主,目前非常少用;
  • 文字接口密码: ssh 为主,已经取代上述的 telnet, rsh 等明码方式;
  • 图形接口: Xdmcp, VNC, RDP 等较为常见

如果你想要使用类似 Windows 的远程桌面联机,该功能使用的是 RDP (Remote Desktop Protocol),那你可得要架设 RDP 服务器才行。

使用 telnet 登入远程主机时使用明码传输不安全,ssh 比较安全,其实是透过 ssh 信道传输讯息时,该讯息在网络上面比较安全,因为数据是加密过的,即使被窃取, 对方可能也不会知道数据内容为何,因此信息比较安全。

3.文字接口连接服务器:SSH服务器

SSH 是 Secure Shell protocol 的简写 (安全的壳程序协议)。

这个 SSH 协议,在预设的状态中,本身就提供两个服务器功能:

  1. 一个就是类似 telnet 的远程联机使用 shell 的服务器,亦即是俗称的 ssh ;
  2. 另一个就是类似 FTP 服务的 sftp-server !提供更安全的 FTP 服务。

(1)连接加密技术

目前常见的网络封包加密技术通常是藉由所谓的『非对称密钥系统』来处理的。 主要是透过两把不一样的公钥与私钥 (Public and Private Key) 来进行加密与解密的过程。由于这两把钥匙是提供加解密的功用, 所以在同一个方向的联机中,这两把钥匙当然是需要成对的!它的功用分别如下:

  • 公钥 (public key):提供给远程主机进行数据加密的行为,也就是说,大家都能取得你的公钥来将数据加密的意思;
  • 私钥 (private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。由于私钥是这么的重要, 因此私钥是不能够外流的!只能保护在自己的主机上。

由于每部主机都应该有自己的密钥 (公钥与私钥),且公钥用来加密而私钥用来解密, 其中私钥不可外流。但因为网络联机是双向的,所以,每个人应该都要有对方的『公钥』才对!那如果以 ssh 这个通讯协议来说,在客户端与服务器端的相对联机方向上,应该有如下的加密动作:

公钥与私钥在进行数据传输时的角色示意图

(2)SSH的联机步骤

我们可以将 ssh 服务器端与客户端的联机步骤示意为下图:

ssh 服务器端与客户端的联机步骤示意图

 

  1. 服务器建立公钥档: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的档案,若系统刚刚安装完成时,由于没有这些公钥档案,因此 sshd 会主动去计算出这些需要的公钥档案,同时也会计算出服务器自己需要的私钥档;
     
  2. 客户端主动联机要求: 若客户端想要联机到 ssh 服务器,则需要使用适当的客户端程序来联机,包括 ssh, pietty 等客户端程序;
     
  3. 服务器传送公钥档给客户端: 接收到客户端的要求后,服务器便将第一个步骤取得的公钥档案传送给客户端使用 (此时应是明码传送,反正公钥本来就是给大家使用的!);
     
  4. 客户端记录/比对服务器的公钥数据及随机计算自己的公私钥: 若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户家目录内的 ~/.ssh/known_hosts 。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥数据, 则开始计算客户端自己的公私钥数据;
     
  5. 回传客户端的公钥数据到服务器端: 用户将自己的公钥传送给服务器。此时服务器:『具有服务器的私钥与客户端的公钥』,而客户端则是: 『具有服务器的公钥以及客户端自己的私钥』,你会看到,在此次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称式密钥系统喔。
     
  6. 开始双向加解密: (1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密; (2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。

(3)ssh :直接登入远程主机的指令

一般使用 ssh 登入远程主机,都会填写『 ssh 账号@主机IP 』的格式, 意思是说,使用该主机的某账号登入的意思。

# 2. 使用 student 账号登入本机
[root@www ~]# ssh student@127.0.0.1
student@127.0.0.1's password:
[student@www ~]$ exit
# 由于加入账号,因此切换身份成为 student 了!另外,因为 127.0.0.1 曾登入过,
# 所以就不会再出现提示你要增加主机公钥的讯息啰!

# 3. 登入对方主机执行过指令后立刻离开的方式:
[root@www ~]# ssh student@127.0.0.1 find / &> ~/find1.log
student@localhost's password:
# 此时你会发现怎么画面卡住了?这是因为上头的指令会造成,你已经登入远程主机,
# 但是执行的指令尚未跑完,因此你会在等待当中。那如何指定系统自己跑?

# 4. 与上题相同,但是让对方主机自己跑该指令,你立刻回到近端主机继续工作:
[root@www ~]# ssh -f student@127.0.0.1 find / &> ~/find1.log
# 此时你会立刻注销 127.0.0.1 ,但 find 指令会自己在远程服务器跑喔!

4.模拟 FTP 的文件传输方式: sftp

ssh 是登入远程服务器进行工作,那如果你只是想要从远程服务器下载或上传档案呢? 那就不是使用 ssh 啦,而必须要使用 sftp 或 scp。这两个指令也都是使用 ssh 的通道 (port 22),只是模拟成 FTP 与复制的动作而已。我们先谈谈 sftp ,这个指令的用法与 ssh 很相似,只是 ssh 是用在登入而 sftp 在上传/下载文件而已。

[root@www ~]# sftp student@localhost
Connecting to localhost...
student@localhost's password: <== 这里请输入密码啊!
sftp> exit  <== 这里就是在等待你输入 ftp 相关指令的地方了!
例题:假设 localhost 为远程服务器,且服务器上有 student 这个使用者。你想要 (1)将本机的 /etc/hosts 上传到 student 家目录,并 (2)将 student 的 .bashrc 复制到本机的 /tmp 底下,该如何透过 sftp 达成?
答:

[root@www ~]# sftp student@localhost
sftp> lls /etc/hosts   <==先看看本机有没有这个档案
/etc/hosts
sftp> put /etc/hosts   <==有的话,那就上传吧!
Uploading /etc/hosts to /home/student/hosts
/etc/hosts                        100%  243     0.2KB/s   00:00
sftp> ls               <==有没有上传成功?看远程目录下的文件名
hosts
sftp> ls -a            <==那有没有隐藏档呢?
.               ..              .bash_history   .bash_logout
.bash_profile   .bashrc         .mozilla        hosts
sftt> lcd /tmp         <==切换本机目录到 /tmp 
sftp> lpwd             <==只是进行确认而已!
Local working directory: /tmp
sftp> get .bashrc      <==没问题就下载吧!
Fetching /home/student/.bashrc to .bashrc
/home/student/.bashrc             100%  124     0.1KB/s   00:00
sftp> lls -a           <==看本地端档案档名
.        .font-unix   keyring-rNd7qX  .X11-unix
..       .gdm_socket  lost+found      scim-panel-socket:0-root
.bashrc  .ICE-unix    mapping-root    .X0-lock
sftp> exit             <==离开吧!

5.档案异地直接复制: scp

通常使用 sftp 是因为可能不知道服务器上面有什么档名的档案存在,如果已经知道服务器上的档案档名了, 那么最简单的文件传输则是透过 scp 这个指令喔!最简单的 scp 用法如下:

[root@www ~]# scp [-pr] [-l 速率] file  [账号@]主机:目录名 <==上传
[root@www ~]# scp [-pr] [-l 速率] [账号@]主机:file  目录名 <==下载
选项与参数:
-p :保留原本档案的权限数据;
-r :复制来源为目录时,可以复制整个目录 (含子目录)
-l :可以限制传输的速度,单位为 Kbits/s ,例如 [-l 800] 代表传输速限 100Kbytes/s

# 1. 将本机的 /etc/hosts* 全部复制到 127.0.0.1 上面的 student 家目录内
[root@www ~]# scp /etc/hosts* student@127.0.0.1:~
student@127.0.0.1's password: <==输入 student 密码
hosts                        100%  207         0.2KB/s   00:00
hosts.allow                  100%  161         0.2KB/s   00:00
hosts.deny                   100%  347         0.3KB/s   00:00
# 文件名显示                   进度  容量(bytes) 传输速度  剩余时间
# 你可以仔细看,出现的讯息有五个字段,意义如上所示。

# 2. 将 127.0.0.1 这部远程主机的 /etc/bashrc 复制到本机的 /tmp 底下
[root@www ~]# scp student@127.0.0.1:/etc/bashrc /tmp

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值