1.SSH介绍

SSH是一种网络通信协议,可以让两台计算机之间实现加密通信。SSH采用的是服务器-客户端模式,顾名思义,也就是向服务器发出请求的部分(客户端 client)以及接收客户端请求的部分(服务端 service)。现阶段,我们使用的最流行的ssh主要指openssh。对于linux/unix系统而言,一般都会自带ssh,如果没有就需要自行安装。

我们可以通过下面的命令查看ssh的版本。

$ ssh -V

以下是我的mac电脑的ssh版本信息

2.SSH远程连接(密码登录)

作为一种通信方式,那么ssh最主要的用途自然就是通过一台电脑连接另一台,比如通过本地客户端连接远程服务器。那么具体该如何操作呢?下面我以我自己的电脑为例,将其作为客户端,然后将我的ubuntu虚拟机作为远程服务器来示范如何连接远程机器。

1.通信建立

当然,在实现ssh连接之前需要先保证你的两台机器能够实现互相通信,可以使用ping命令。如果你和我一样使用虚拟机(VirtualBox)进行测试,需要先配置虚拟机的网卡,这里就不展开了,大家可以参考这篇文章。

下面我来测试一下我的两台电脑之间的通信。

我的主机和虚拟机的ip地址分别为:192.168.56.1&192.168.56.5

因此在主机上,我使用下面命令

如果出现上面类似的结果,表示可以建立连接,如果出现timeout等情况,就表示连接不成功,你需要检查你的虚拟机网卡是否配置完成或者是否输入了错误的ip地址,可以使用下面命令检查电脑的ip地址

$ ifconfig | grep inet

同样的在虚拟机上也使用类似的命令ping主机(请忽略我奇怪的主机名,因为之前做spark时尝试构建集群...)

2.请求发送

OK,现在两台机器能够实现通信。接下来,我要通过主机向虚拟机发送连接请求

$ ssh -p 22 username@hostname
or
$ ssh -p 22 username@ip

这里的-p,指的是port端口号,ssh默认端口为22,username为对方电脑用户名,hostname为对方电脑主机名,ip自然就是对方电脑的ip地址。以下是我通过主机连接虚拟机的实例。

如上图所见,当在命令行输入连接请求命令后,系统会显示无法连接的提示,并返回一串字符串,并提示你是否要继续连接。那么这里是什么意思呢?

因为当你的电脑第连接远程电脑时,首先会有一个验证过程,验证远程电脑(一般为服务器)地址是否为陌生地址,如果为第一次连接(正如上述我的例子),自然就会显示不认识这台服务器,然后提醒用户是否要继续连接。而输出的这一长串则是服务器的指纹,也就是ssh服务器公钥的hash值,用于识别某台特定服务器。

如果确定这台服务器是安全的,直接输入yes即可。然后系统会提示如下信息

意味着当前远程电脑的指纹被存储在主机中了,我们可以在~/.ssh/known_hosts文件中找到它。同时之后再连接这台机器就不会再产生上面的warning了。然后就剩下最后一步了,ssh会要求客户端输入远程电脑的登陆密码,输入完成就能登录远程机器的shell了。如下

3.成功连接

登录成功后,你就可以通过你的主机对远程机器进行操作了。

3.SSH远程连接(密钥登录)

虽然SSH默认可以通过密码的方式登陆,但是事实上密码的安全性还是不够高,同时每次手动输入还是蛮麻烦的,事实上SSH还提供了另一种登录方式:密钥登录。

SSH采用的是非对称加密,即同时存在公钥(public key)私钥(private key),公钥和私钥都是一一对应的,每个私钥都有且仅有一个对应的公钥。每个用户可以公开自己的公钥,但是私钥需要私密保存。如果数据使用公钥进行加密,那么只能使用对应的私钥才能解密,反之,如果数据使用私钥加密,也只能使用对应的公钥进行解密。

那么要通过ssh实现客户端(local machine)到远程机器(remote machine)的密钥登录具体该怎么操作呢?

1.客户端生成公私钥对

要使用密钥登录,首先就是必须在客户端生成公私钥对。需要通过ssh-keygen命令,同时必须指定具体的加密方式,一般为rsa或者dsa,也可以是ed25529等等

$ ssh-keygen -t rsa
or
$ ssh-keygen -t dsa
or
$ ssh-keygen -t ed25519

当然你也可以指定其他参数,比如保存私钥的文件路径(-f),默认在~/.ssh/xxx 下,在生成私钥文件的同时,也会自动生成一个公钥文件,默认为~/.ssh/xxx.pub。

下面我使用ed255191加密方式在我的主机上来生成公私钥对。

输入命令后,系统会产生一系列提示信息要求你输入,包括文件存储路径,以及是否需要对私钥文件做密码保护(passphrase),如果你不需要,就直接回车。最终就会生成公私钥文件,同时显示器还会显示公钥的指纹。

OK,我们可以稍微进入到指定路径看一下生成的文件,私钥以及公钥。

2.上传公钥到远程机器

接下来我们需要将我们生成的公钥内容上传到指定的远程机器的~/.ssh/authorized_keys文件中。当然我们可以直接将复制粘贴,这是最直接的方法,除了这种方法之外,再介绍两种命令行操作的方式。

方式一

$ cat ~/.ssh/id_ed25519.pub | ssh username@hostname "cat>>~/.ssh/authorized_keys"

上面的username 和 hostname分别代表远程机器的用户名和主机名。然后大概解释一下这个命令,首先通过cat命令将主机上的公钥文件进行显示,并将其作为输入,利用|(管道函数)传递给后半部分命令。而后半部分命令就是通过ssh登录远程主机并执行"cat>>~/.ssh/authorized_keys"。也就是将管道函数前的输入(公钥)通过cat>>添加到远程机器的.ssh目录下的authorized_keys文件中。

顺便一提,管道函数的后半部分(如下)也是通过ssh对远程机器进行操作的基本语法。

$ ssh username@hostname "command"

方式二

出来这种方法之外,还有一种更简单的方法。openssh自带一个ssh-copy-id的命令,可以自动将公钥拷贝到远程机器的~/.ssh/authorized_keys文件中。即使该文件夹不存在,也会自动创建该文件。命令如下

$ ssh-copy-id -i key_file username@hostname

其中key_file表示本地指定的公钥文件。

下面我使用我的主机来使用第一种方式操作一下,对于第二种方式,有兴趣的读者可以自行尝试。

当然在这次远程访问虚拟机时需要输入password。

然后我们就可以尝试直接连接远程机器,不再需要密码了。

我们也可以在虚拟机的环境下,查看一下.ssh文件夹。

发现确实authorized_keys文件已经存在,同时里面包含了我们主机的公钥。

OK,到这里我来做个小总结,在这篇文章中,我们了解了SSH的基本概念以及如何通过ssh访问远程机器,接下来,我还会继续深入SSH的其他内容,敬请期待。最后谢谢大家的阅读。

参考:

1.<<SSH入门教程>>

2.MIT-Missing Semester_Command Line Environment

SSH(Secure Shell)基本介绍以及远程机器的连接方式相关推荐

  1. 图解Windows下使用SSH Secure Shell Client远程连接Linux

    SSH是一个用来替代TELNET.FTP以及R命令的工具包,主要解决口令在网上明文传输的问题. 一 下载安装SSH Secure Shell Client 按常规操作很快即可下载安装完成.安装后开始菜 ...

  2. SSH secure shell 权威指南(转载)

    本书是一本介绍通信安全的书籍,如果你想保障你的通信安全,本书能给你一个很好的解决方案.本书从ssh协议介绍起,到具体的开源实现和商业实现.但本书同时介绍开源实现和商业实现,给人感觉比较乱. 注意:由于 ...

  3. windows登录linux免密码,Windows使用SSH Secure Shell实现免密码登录Linux的方法以及使用scp2命令免密码下载文件...

    1.   环境信息 SSH Secure Shell Client所在的操作系统: Windows7 Linux服务器以及SSH的版本: [hadoop@gpmaster ~]$ cat /etc/r ...

  4. Windows使用SSH Secure Shell实现免密码登录Linux的方法以及使用scp2命令免密码下载文件

    1.   环境信息 SSH Secure Shell Client所在的操作系统: Windows7 Linux服务器以及SSH的版本: [hadoop@gpmaster ~]$ cat /etc/r ...

  5. ssh汉字乱码怎么办_[转]SSH Secure Shell Client中文乱码的解决办法

    一.SSH Secure File Transfer Client Windows使用的GB2312编码,大多数Linux系统支持的是UTF-8编码,而远程登陆时使用的是本地编码.所以,初次使用SSH ...

  6. SSH Secure Shell显示GCC编译错误信息乱码解决方法

    今天在WindowsXP下使用远程到CentOS服务器上,使用 gcc 编译程序,程序编译出错,但是gcc的输出信息中有少量乱码(如图1),直接在服务器的命令行中显示正常. 解决办法如下: 在用户的配 ...

  7. VNCServer,SSH Secure Shell Client,window远程控制linux

    1.VNC远程连接linux图形化桌面 2.SSH Secure Shell Client连接linux终端 3.设置FTP与linux传输文件 1.VNC远程连接linux图形化桌面 在centos ...

  8. windows ssh传文件linux,利用SSH secure Shell实现windows与linux之间传输文件

    在windows下安装SSH secure Shell.默认安装后有两个快捷方式. linux下需要安装openssh-server utuntu默认安装了opens是-client,所以不需要安装, ...

  9. ssh secure shell

    ssh secure shell 和securecrt xhell一样,都是终端工具 转载于:https://www.cnblogs.com/panxuejun/p/6245645.html

最新文章

  1. [ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)
  2. R语言计算杰卡德相似系数(Jaccard Similarity)实战:自定义函数计算Jaccard相似度、对字符串向量计算Jaccard相似度、将Jaccard相似度转化为Jaccard距离
  3. android 闪烁发光动画,androidview动画发光效果在imageview上
  4. 【Efficient-Net】基于Efficient-Net效滤网的目标识别算法的MATLAB仿真
  5. C++五子棋(七)——main函数以及项目总结
  6. skynet 报错 skynet 服务缺陷 Lua死循环
  7. 主流云服务器购买平台
  8. php面试心得,php面试题的总结
  9. 1分钟理解pytorch的reshape函数中-1表示的意义
  10. linux发邮件权限,Linux通过命令行发邮件的步骤
  11. 计算机与打印机脱机后怎么共享,打印机脱机工作怎么恢复(连接的共享打印机脱机)...
  12. 用C语言将搜狗输入法词库转换成QQ拼音输入法词库
  13. 中国ERP三大流程 国外ERP黯然失色
  14. JAVA定时调度框架Quartz使用案例
  15. 最新版IntelliJ IDEA2019 破解教程(2019.08.07-情人节更新)
  16. 猿创征文 | Python 开发工具进化之旅
  17. 第九章 更自由,更开放,大数据的机遇和挑战
  18. CF-940-F. Machine Learning【带修莫队】
  19. 罗斯魔影消消乐h5游戏源码
  20. 桌面壁纸被计算机管理员禁用,更改桌面背景时显示已经被系统管理员禁用,这种情况要怎么处理...

热门文章

  1. K8S---Pod进阶资源限制以及探针
  2. 特征函数篇2——与概率密度的函数
  3. 每日学习(每天学习后的笔记)
  4. 俞军与他的PM12条
  5. P6软件设置OBS组织分解结构
  6. sched_setscheduler
  7. Kggle比赛之Artifical Neural Networks Applied to Taxi Destination Prediction
  8. docker 日志级别
  9. Qt按键值与Windows Virtual-Key Codes映射表
  10. matlab十进制转二进制补码函数