ssh连接到虚拟机

虚拟机ping不通主机|外网IP连不上虚拟机

参考网址:https://www.lullabot.com/articles/fixing-docker-and-vpn-ip-address-conflicts

问题:虚拟机有个web服务,开启了3000端口监听,VMware已经设置了NAT IP映射,将虚拟机IP:3000映射到宿主机的8888端口,浏览器能够通过localhost:8888打开网页,但是不能通过ip:8888打开网站,并且发现虚拟机不能够ping通主机,折腾了一天,终于发现了问题并解决了。

宿主机的IP为172.21.XX.XX。

虚拟机的IP为192.168.100.128。

1、查看虚拟网卡

首先先用ifconfig或者ip addr来查看所有虚拟网卡

6: br-08e37aab0021: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:40:a3:a0:63 brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.1/16 brd 172.21.255.255 scope global br-08e37aab0021
       valid_lft forever preferred_lft forever
8: br-70d04f7b2a8c: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:35:bb:bc:eb brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.1/16 brd 172.19.255.255 scope global br-70d04f7b2a8c
       valid_lft forever preferred_lft forever
9: br-86768d2533cf: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:71:49:8e:d7 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-86768d2533cf
       valid_lft forever preferred_lft forever
10: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:a0:61:83:8f brd ff:ff:ff:ff:ff:ff
    inet 172.240.0.1/24 brd 172.240.0.255 scope global docker0
       valid_lft forever preferred_lft forever

发现172.21.XX.XX被ubuntu创建的虚拟网卡给占用了,所以ping宿主机会ping不通。

因此关掉这一个虚拟网卡就行了。

ifconfig xxx down

这样子虚拟机就能够ping主机了。

但这种方法治标不治本,因为下次重启的时候还会有虚拟网卡占用位置,需要解决根本问题

2、查找根源

经过我的推理,发现docker0是从172.17开始的,然后一群br-打头的是在docker0按序排列的,因此怀疑是docker的容器问题,通过后续的验证,确实是这个问题。

查看所有docker的网络。

docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
5a2ae899ce99   bridge        bridge    local
08e37aab0021   ca		     bridge    local
.......

会发现network id正好和上面br-08e37aab0021相对应!

通过下面的语句来查看网络声明了哪些子网。

docker network inspect 08e37aab0021

可以看到下面的输出,因此确实是docker的其中一个容器使用了这些网络

"Subnet": "172.21.0.0/24",
"Gateway": "172.21.0.1"

找到这里,已经发现了根源,因此只需要解决问题就行了。

3、解决问题

要解决此问题,我们可以修改docker使用的默认daemon.json文件。

$ vi /etc/docker/daemon.json
{
  "default-address-pools" : [
    {
      "base" : "172.240.0.0/16",
      "size" : 24
    }
  ]
}

上面配置意思:docker所有的服务在地址池 172.240.0.0/16 网段范围划分,每个子网掩码划分为 255.255.255.0

因此docker0的地址会是172.240.0.XX

下一个br-的地址会是172.240.1.XX

以此类推。

4、重启docker

停止所有的容器。

docker stop $(docker ps -a -q)

重启docker服务

systemctl restart docker

删除所有未使用的网络

docker network prune

到这里你再查看所有虚拟网卡

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.32.0.1  netmask 255.255.0.0  broadcast 172.32.255.255
        ether 02:42:0c:b7:b6:ef  txqueuelen 0  (以太网)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

会发现docker会按照你之前给定的ip开始,如果开启新的docker容器,也是按照地址池的范围来进行设置。

到这里我们就解决了问题,可以互相ping通了,并且浏览器也能通过ip访问到了虚拟机内搭建的网页。

主机IDEA连接到虚拟机

虚拟机先安装ssh

https://blog.csdn.net/qq_16102655/article/details/85340432

apt-get install openssh-server        

查看是否开启

ps -ef | grep ssh

开启服务

service ssh start
/etc/init.d/ssh start 
#注释: start 开启;	restart 重启;	stop 停止

修改配置

vim /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
PermitRootLogin yes

说明

PermitRootLogin yes   #允许root用户以任何认证方式登录
PermitRootLogin without-password  #只允许root用public key认证方式登录
PermitRootLogin no   #不允许root用户以任何认证方式登录

然后重启一下

service ssh restart
/etc/init.d/ssh restart 

idea连接虚拟机

参考网址:https://blog.csdn.net/jenrey/article/details/80054585

1、idea上面点击如下菜单:Tools—Deployment—Configuration

2、新增一台虚机,输入名称,选择SFTP协议,点击OK

3、输入IP地址、代码路径、账号密码,点击OK

3.1、点击Mappings,然后修改local path和deployment path on server的地址,上面的是宿主机,下面的是虚拟机的,然后就可以右键文件,deployment一下

4、点击Tools—Deployment—Browse RemoteHost

5、右侧会出现对应的代码路径,修改完代码之后,可以点击右上角的upload图标,将代码上传到虚拟机。

6、点击Tools—Start SSH session…可以打开远程界面

主机vscode连接到虚拟机

https://blog.csdn.net/Novak_li/article/details/105035575

vscode免密登录

https://blog.csdn.net/qq_34846662/article/details/99051947

在本机的gitbash下运行,如果本地有ssh的可以跳过

ssh-keygen -t rsa -C "szx741"

虚拟机上也运行同样的命令

 ssh-keygen -t rsa -C "szx741"

拷贝公钥到远程服务器上

本地ssh的公钥(id_rsa.pub)拷贝到远程服务器的root目录下,然后

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

Remote Development配置

点击VSCode侧边栏的小屏幕标志再点击齿轮配置你的远程信息

Host 显示在连接选项中的名字,
HostName 你的ssh服务器的地址
User 你登录ssh时的用户名
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇