使用ssh连接VirtualBox虚拟机

使用SSH连接VirtualBox虚拟机

步骤:

  • 配置虚拟机网络,添加端口转发规则
  • 测试服务器端ssh是否安装
  • 测试远程主机是否可以连接;注意提示信息
  • 服务器安装ssh
  • 配置服务器防火墙
  • 远程主机生成密钥对
  • 导入远程主机公钥至服务器(无密登录)

1. 配置虚拟机网络,添加端口转发规则

1.1 桥接模式

虚拟机的网络就相当于主机一样并行存在,所以当前主机要连接到路由器或交换机等设备,以使两个系统处于同一局域网。

1.2 网络地址转换NAT

NAT模式即虚拟机的网络是完全依赖于物理主机的网络。此时两个系统并不是处于同一局域网,不能简单的ping通;
但是可以设置Virtualbox在NAT模式(网络地址转换NAT)下的端口转发规则,通过设置规则可使主机连接虚拟机。

设置 -> 网络 -> 网络地址转换(NAT) -> 高级 -> 端口转发 -> 添加规则 :

  1. 名称可随便填写,如ssh
  2. 主机IP可以不填,或者填写127.0.0.1
  3. 主机端口随意填写一个不会产生冲突的端口,如2222
  4. 子系统端口可以不填,或者填写子系统当前IP地址
  5. 子系统端口如果是要进行ssh连接,则填写22 ; ftp就填写21

示例:

名称 协议 主机IP 主机端口 子系统IP 子系统端口
ftp TCP 2121 21
ssh TCP 2222 22
http TCP 8080 80
mysql TCP 127.0.0.1 3306 10.0.2.15 3306
oracle TCP 1521 1521

参考:
http://reverland.bitbucket.org/VirtualBox_net.html
http://www.myhack58.com/Article/48/66/2014/46228.htm
设置两个网卡,一个NAT,一个桥接 http://my.oschina.net/dmdgeeker/blog/229044
centos7 虚拟机相互访问的网卡设置
VirtualBox下虚拟机和主机内网互通+虚拟机静态IP的网络配置
VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射
A short guide to networking in Virtual Box with Oracle Linux inside

详细介绍
http://www.cnblogs.com/adforce/archive/2013/10/11/3363373.html

2. 测试服务器端ssh是否安装

测试是否安装ssh:

ssh localhost 
//使用该命令后,如果已经安装,会提示你是否接收服务器发给你的公钥,并让你输入yes/no,此时输入 yes 。这样才能对你发给服务器的信息进行加密。

3. 测试远程主机是否可以连接

如果已经安装,则进行这一步。

测试是否可以使用SSH连接 :使用密码登录(设置好端口转发后)

因为端口不是常规默认的,所以需要指定 port

如进行ssh连接则在shell中输入:

$ ssh -p 2222 username@127.0.0.1
或将上面的 127.0.0.1 改为localhost  

进行sftp连接(其端口与ssh是一样的,因为它是ssh的一部分):

$ sftp -o port=2222 username@127.0.0.1 

由于SSH是使用非对称密钥来进行安全认证,所以在第一次与某主机通信时会提示你,连接的主机是不是可靠的。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录 shell,不再要求密码。

ftp连接:

$ ftp  host-name [port]
或 
$ ftp
ftp> open host-name [port] 

可能并不成功,不知是不是防火墙的问题,使用sftp就好了,更安全。

将上面的 username 改为自己的。

前提是虚拟机中的Linux安装了ssh服务并开启,且关闭了防火墙(或添加了相应规则)。

如果测试不成功则跳转到第5节

4. 服务器安装ssh

安装ssh:

sudo apt-get install openssh-server 

启动服务:

sudo /etc/init.d/ssh start 

查看是否启动:

ps -e | grep sshd 

配置防火墙

此时在远程客户端进行连接测试,如果可行

Linux 上安装 ssh (Ubuntu & RedHat)

5. 配置服务器防火墙

5.1 配置动态防火墙firewalld

使用了动态防火墙:变更后无需重启系统。它不能与静态防火墙共存。

可以选择开启某个端口,或完全关闭防火墙

配置好防火墙后,跳转到第3节,进行远程测试。

5.1.1 为服务器防火墙开启22端口或开启ssh服务

在CentOS7上默认是开启了 ssh 服务的。如果不行就试一下同时开启端口。

firewall-cmd --permanent --add-port=22/tcp
或选择
firewall-cmd --permanent  --add-service=ssh
然后重新加载防火墙
systemctl reload firewalld

查看是否已经开启:

firewall-cmd --list-all

在列出的信息中,查看port开头的行是否包含 22 。

5.1.2 关闭服务器防火墙

查看防火墙状态:

systemctl status firewalld  

临时关闭防火墙:

systemctl stop firewalld 

永久关闭防火墙:

systemctl disable firewalld  

打开防火墙:

systemctl enable firewalld   

注意需要root权限。

5.2 配置静态防火墙 iptables (不必)

fedora,centos等,基本都已经使用动态防火墙(两者不能共存)了。此处是否有效未知。

关闭:

service iptables stop  

开启:

service iptables start   

开机默认关闭防火墙:(即永久)

chkconfig iptables off  

开机默认开启防火墙:

chkconfig iptables on  

fedora不可用
参考: http://my.oschina.net/u/217959/blog/38051

生成SSH key

SSH原理与运用(一):远程登录
SSH原理与运用(二):远程操作与端口转发
Asrchlinux wiki:
Secure Shell (简体中文)
SSH keys (简体中文)

6. 远程主机生成密钥对

这部分不大全面。
公钥是一串很长的字符,为了便于肉眼比对和识别,所以有了指纹这东西,指纹位数更便于识别且与公钥一一对应。

运行命令ssh-keygen采用rsa加密算法生成密钥对

ssh-keygen -t rsa

生成密钥对时,有一个选项要求你设置密码passphrase,该密码是用来保护你的私钥的密码。如果设置了则在使用私钥时会要求你输入这个密码;一般不设置,记不住【之后还可更改此密码,使用ssh-keygen -p】。

生成后最好将私钥进行备份。另还有-C选项,用于为指定注释通常使用自己的邮件名作为注释

-b bits选项 Specifies the number of bits in the key to create. For RSA keys, the minimum size is 1024 bits and the default is 2048 bits. Generally, 2048 bits is considered sufficient. DSA keys must be exactly 1024 bits

示例:为了安全考虑使用RSA加密并设置 -b 4096

$ ssh-keygen -t rsa -C "your_email@example.com" -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa): 按回车键 (如果需要生成多对key,则输入/home/users/.ssh/filename)
Enter passphrase (empty for no passphrase): 输入密码(一般不输入密码,直接回车)
Enter same passphrase again: 再次输入密码
...

# 查看公钥文件中的内容
$ cat ~/.ssh/id_rsa.pub
ssh-rsa "公钥内容" your_email@example.com

# 注意在其他地方导入公钥时一定要将公钥文件中的*全部内容*都导入,包括末尾你的邮箱。(邮箱可能是由 -C 指定的??)

实际操作的一次示例:

[fan 16:10:57]~$ ssh-keygen -t rsa -C "Fan@outlook.com" -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fan/.ssh/id_rsa): /home/fan/.ssh/FDGitHub_rsa
Enter passphrase (empty for no passphrase):  (不要密码直接回车)
Enter same passphrase again: 
Your identification has been saved in /home/fan/.ssh/FDGitHub_rsa.
Your public key has been saved in /home/fan/.ssh/FDGitHub_rsa.pub.
The key fingerprint is:
SHA256:GcK7ORvFzH6fzA7qPmnzBr1DOWho5cCVgIpLkh6VGb8 Fan@outlook.com
The key's randomart image is:
+---[RSA 4096]----+
|   .+... .       |
|   +o.  o        |
| o.. oo..        |
|+o.   +*.o       |
|     .=..+oo     |
|       +=o+= .   |
|      .++=.o*    |
+----[SHA256]-----+

指纹的用处之一是在使用SSH第一连接到某主机时,会返回该主机使用的公钥的指纹让你识别。示例:

The authenticity of host '某主机名' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?

简单介绍一下:

公钥用于给别人用来加密文件。公钥就是一把锁,你把锁给别人,他用锁锁住东西后,除了你自己外其他人是没有钥匙(私钥)的,都无法打开。配对的私钥就是钥匙。

必须保证使用你的公钥的人明确知道这个公钥一定是你的。你可以在网站或通过其它方式公布你的公钥,以便他人进行对照确认。由于公钥很长,所以有了对应的指纹(指纹更易辨别,位数更少),可以通过指纹进行对照(公布指纹)。

如需进一步了解SSH Key的更多用法见《SSH key的生成与使用.md》

7. 导入远程主机公钥至服务器,并进行配置(无密登录)

7.1 导入公钥

把公钥上传到服务器端有很多方法:

  1. 使用sftp
  2. 使用ssh-copy-id
  3. 使用scp
  4. ...

使用sftp的示例:

#先使用sftp进行连接
$ sftp -o port=2222 root@127.0.0.1
#连接之后,(可使用help命令查看帮助)。
sftp>  put ~/.ssh/id_rsa.pub  ~/

使用ssh-copy-id的示例:
默认上传到~/.ssh/id_ecdsa.pub

#简便形式;(如果名字为默认则可免去指定公钥名)
$ ssh-copy-id  -p 2222  root@127.0.0.1
#另一个示例
$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 221 username@remote-server.org

上传之后:
导入公钥内容到指定的文件中

$ cat ~/路径/id_rsa.pub >> ~/.ssh/authorized_keys

保证 authorized_keys 文件的安全

$ chmod 600 ~/.ssh/authorized_keys

7.2 配置ssh服务

sshd的配置文件位于: /etc/ssh/sshd_config
只需配置:

 GSSAPIAuthentication  no         #无需查询DNS,加快速度
 PermitRootLogin yes            #允许root的ssh登录;虚拟机图个方便而已,建议关闭
 PubkeyAuthentication yes   #启用公钥验证
 AuthorizedKeysFile    .ssh/authorized_keys        #公钥的保存位置,记住即可之后需要用到
 PasswordAuthentication yes #允许使用密码验证登录,实际建议关闭
 PermitEmptyPasswords no    #是否允许空密码登录,no

关闭服务器中的SELinux服务:
其配置文件是: /etc/selinux/config
在文件中添加:

SELINUX=permissive  

重启系统 或 使用root账户运行:setenforce Permissive

服务器端重启ssh服务:

service sshd restart

8 相关问题

连接时出现的提示信息

相关示例:

有一次出现:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@ 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-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is 98:ab:2b:30:60:00:82:86:bb:85:db:87:22:c4:4f:b1. Please contact your system administrator.

这可能是我配置了两台虚拟机,虚拟机配置端口转发时设置的IP地址和端口都是相同的。才导致此提示该主机的指纹(也可能是指公钥)已经改变;更改了端口就没有问题了。(另一种做法是删除.ssh/known_hosts文件,以后连接时再全部重新导入)

后一次出现

[root]~ $ sftp -o port=2222 root@127.0.0.1
The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established(建立).
ECDSA key fingerprint(指纹) is SHA256:JE63mxnefTg1Hc/x5BhF+rdWmkFN6FiOBRoye56odW4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently(永久的) added '[127.0.0.1]:2222' (ECDSA) to the list of known hosts.
root@127.0.0.1's password:

这段提示用于提示你是否信任该主机(这里指服务器),如果输入yes则信任该主机并且将该服务器的公钥追加到 .ssh/known_hosts文件中。

SSH图片

enter image description here
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • 1、远程连接服务器 远程连接服务器对于管理员来说,是一个很有用的操作。它使得对服务器的管理更为方便。不过方便归方便...
    Zhang21阅读 39,484评论 0 20
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,590评论 2 57
  • 前言 10月3日22点,看到剑飞大神发布的写作马拉松召集信息和相关指引文章。 想起今年元旦我参加了人生第一次马拉松...
    披袄雪阅读 749评论 5 8
  • 岁月的长河中人来人往,却没人为你驻足。你渴望陪伴,可最后也只是孤单一人,在黑暗的路途中,连影子都抛弃了你。 我曾自...
    友爱的宋辞阅读 341评论 7 1