Попытка к SSH к локальной Ubuntu VM со Шпаклевкой

Каждой консоли связали процесс с ним. Можно обычно находить их на списке процессов достаточно легко. На Ubuntu это называют getty или agetty. В других системах это могло бы быть login, или это мог просто быть процесс оболочки.

Все, что необходимо сделать, отключают тот процесс для закрытия последовательного порта. Вы не можете уничтожить его потому что init просто породит новый, но Вы могли приостановить его:

kill -STOP <pid>

Где Вы находите <pid> с ps.

Затем когда Вы хотите повторно включить его, Вы перезапускаете его:

kill -CONT <pid>

Или, если Вы хотите, чтобы это начало заново, уничтожило его и позволило переикре произойти:

kill -KILL <pid>

Конечно, необходимо не забыть перезапускать его прежде, чем оставить telnet. Если Вы хотите что-то более надежное, оно зависит, какие утилиты Ваша система имеет. Если Вы имеете cron затем Вы могли настроить что-то, что проверяет, пошел ли telnet (начиная с него, в последний раз смотрел), и перезапускает последовательный терминал. Это было бы немного хитро, но возможно. Если у Вас нет крона, затем запускают своего рода фоновый процесс, который просыпается на SIGHUP и делает перезапуск. Это, вероятно, еще более хитро.

153
09.11.2015, 01:30
6 ответов

, в то время как [$ X -lt «$1»] оценивается, даже если нет $1.

Переместите остальную часть кода в блок else, чтобы этого не произошло.

function random-word {
    # from linuxconfig.org 

    if [ $# -eq 0 ] 
    then 
        echo "I need an argument, dummy"
        # To be extra friendly, give them a random word.
        echo "Here's a random word:"
        random-word 1
    else
        # Constants 
        X=0

         ...

        sed `echo $random_number`"q;d" $ALL_NON_RANDOM_WORDS 
          let "X = X + 1" 
        done
    fi
}
-121--253463-

Вам не нужен блок else . И вам не нужно терпеть неудачу, если вы получаете более одного аргумента. Вы должны потерпеть неудачу, только если вы не получите аргумент, а затем вы можете просто игнорировать все остальное или выйти, если вы не получите хотя бы один.

set -- "${1?ERR: Where\'s my argument?!?!}"

Это утверждение делает все это. Это делает то же самое, но и не удается, если первым аргументом является только " nullstring:

set -- "${1:?ERR: Where\'s my argument?!?!}"

Конечно, если точка в том, чтобы быть функцией оболочки, вызванной из интерактивной оболочки, это может также убить интерактивную оболочку, так что вы можете сделать:

(: "${1:?Where\'s my argument?}") || return && set -- "$1"

... которая также будет обрабатывать это. Но, на мой взгляд, функция оболочки никогда не должна влиять на интерактивную оболочку, если она не является абсолютно необходимой - например, если ей нужно изменить текущую переменную оболочки или что-то в этом роде. И так лучше, чем выше было бы объявить функцию в качестве подслова, как:

fn() (set -- "${1:?Where\'s my argument?}" && echo "$1")

... делает.

Другой способ сделать это - принять все аргументы и объединить их - так что все аргументы рассматриваются только как один в каждом случае. Можно сделать так, как:

fn() (                              
    : "${1:?ERR: Where\'s my argument?}"
    set -- "$*" && echo "$1" 
)
fn '' ; fn here are a lot of arguments that will all be treated as one
###OUTPUT###
sh: line 2: 1: ERR: Where's my argument?
here are a lot of arguments that will all be treated as one

Мне лично не очень нравится sh: line 2:1: бит, который обычно бывает - по крайней мере, не в интерактивных оболочках. Обычно я вставляю CTRL + V CTRL + M перед ERR: , так что он возвращается в начало строки в терминале и записывает этот бит, но при этом выводит более полезную информацию в журнал. Например,

fn() (                              
    : "${1:?^MERR: Where\'s my argument?}"
    set -- "$*" && echo "$1" 
)
fn ; fn 2>&1 | cat -A
###OUTPUT###
ERR: Where's my argument?
sh: line 2: 1: ^MERR: Where's my argument?$
-121--253464-

VirtureBox создаст частную сеть (10,0,2 .x), которая будет подключена к сети хоста с помощью NAT . (Если не указано иное.)

Это означает, что прямой доступ к хосту частной сети из сети хоста невозможен. Для этого необходима переадресация через порт. В сетевых настройках виртуальной машины можно, например, настроить VirtureBox на открытие порта 22 на 127.0.1.1 (адрес закольцовывания хоста) и пересылать любой трафик на порт 22 10,0,2,1 (внутренний адрес виртуальной машины)

Таким образом, можно указать putty на порт 22 из 127.0.1.1, и VirtureBox перенаправит это подключение на виртуальную машину, где ее демон ssh ответит на него, позволяя войти в систему.

192
27.01.2020, 19:28

Сначала вам нужно решить, подключена ли ваша ВМ к компьютеру через мостовое соединение или через NAT, но в другом случае вам нужно поместить IP-адрес ВМ в шпаклевку, чтобы иметь возможность подключиться к ip, в терминале ВМ запустите эту команду, чтобы показать вам IP-адрес машины. (а 127.0.0.1 не является IP-адресом машины)

VM # ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:d9:16:b3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.1 scope global eth0
       valid_lft forever preferred_lft forever

в этом случае мой IP-адрес будет к 10.0.2. 15,

Сначала попробуйте убедиться, что вы можете общаться с ВМ на базовом уровне, откройте терминальное окно на вашем хосте и попробуйте пинговать ВМ

HOST # ping 10.0.2.15

PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.
64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from 10.0.2.15: icmp_seq=2 ttl=64 time=0.110 ms
64 bytes from 10.0.2.15: icmp_seq=3 ttl=64 time=0.099 ms

Если вы получите результат ant, то убедитесь, что на ВМ запущен сервис ssh, в терминале на вашем типе ВМ как root,

VM # netstat -lnpt | grep 22
tcp   0  0  0.0.0.0:22  0.0.0.0:*  LISTEN  2361/sshd

Это говорит о том, что у нас есть сервис/процесс с PID(2361), называемый sshd (демон OpenSSH), прослушивающий порт 22.

Вы можете проверить корректность работы сервиса, попробовав ssh на него с ВМ самостоятельно,

VM # ssh 127.0.0.1

Далее, чтобы убедиться, что вы не блокируете порт 22 в вашем брандмауэре/iptables, я не могу в это поверить, но проверьте его в любом случае. В ВМ введите эту команду, чтобы показать вам iptables,

VM # iptables -nvL INPUT

в выводе вы должны иметь строку, подобную этой:

0  0  ACCEPT  tcp  --  *  *  0.0.0.0/0  0.0.0.0/0  tcp  dpt:22  ctstate  NEW
21
27.01.2020, 19:28

Я хотел использовать PUTTY, чтобы подключиться к моей Ubuntu на виртуальной коробке (комфортные причины, VB просто странно. Я не могу работать, если он не будет на правильном терминале). В любом случае,

  1. Убедитесь, что клиент SSH установлен на вашем Linux. Если нет, установите его sudo apt install ssh .
  2. Выключите ОС.
  3. Теперь на вашем VB Перейдите в настройки -> Network -> на Адаптер 1 Выберите Адаптер только для хоста -> Нажмите ОК .
  4. Теперь начните вашу ОС. Беги IFCONFIG ; Теперь адрес INET - ваш IP.
  5. Используйте это и запустите его на замазке. Войдите в систему с вашими учетными данными.

Единственный недостаток использования адаптера только в хосте является то, что ваша гостевая ОС не будет иметь доступ к более широкой сети (например, в Интернете).

Если вам также понадобится ваша VM, чтобы иметь доступ в Интернет, оставить адаптер 1 в качестве NAT и включить адаптер 2, сконфигурированный как адаптер только в хосте. Это позволит вашему виртуальному питанию подключаться к Интернету, используя NAT, а также сделать локальное соединение с вашим хостом, используя только хост.

48
27.01.2020, 19:28

Мое разрешение было похоже на разрешение Roman T, однако мне пришлось добавить несколько дополнительных шагов. В моем случае у меня была виртуальная машина Ubuntu Server 14, работающая на рабочем столе Windows 8 в домене Windows 2008. Если бы я попробовал NAT или Bridge, я мог бы получить доступ к Интернету, но не смог бы подключиться через SSH.

Если бы я попробовал Host Only Adapter, то это позволило бы мне подключиться к машине по SSH, но не смог бы получить доступ к Интернету.

Я тоже пробовал переадресацию порта, и без радости. Открыл Wireshark и просто не нашел ВМ.

Я решил добавить второй сетевой адаптер.

Метод

С выключенной виртуальной машиной

  1. Нажмите «Настройки»> «Сеть», нажмите «Адаптер 1» и выберите «Мостовой адаптер».
  2. Нажмите «Адаптер 2» и выберите «Только хост-адаптер».
  3. Нажмите «Файл»> «Настройки»> «Сети под NAT», если вы не видите сеть NAT, щелкните значок +, чтобы добавить сеть NAT.
  4. Щелкните «Сети только для хоста», если вы не видите сеть «Только для хоста», щелкните значок +, чтобы добавить одну

Запустить виртуальную машину

  1. Для просмотра сетевого адаптера необходимо ввести

     ifconfig -a { {1}} 
  2. Вы можете увидеть, что к сетевому адаптеру добавлен MAC-адрес, но не IP?

  3. Если да, то вам нужно отредактировать / etc / network / interfaces, чтобы настроить DHCP. Пример ниже с использованием VI / VIM, но вы можете использовать редактор по вашему выбору

     sudo vi / etc / network / interfaces 
     
  4. добавить строки

     auto eth1 
    iface eth1 inet dhcp 
     
  5. сохранить и закрыть файл.
  6. Затем попробуйте перезапустить сетевую службу с помощью следующей команды

     sudo service network restart 
     
  7. Или, если это не удалось, перезапустите виртуальную машину.
  8. После перезапуска введите ниже, чтобы узнать, назначен ли вам eth1 IP-адрес

     ifconfig -a 
     
  9. , если да, то посмотрите, можете ли вы подключиться к виртуальной машине по SSH
15
27.01.2020, 19:28

Следующие инструкции работали с Ubuntu 14.04 и Oracle VirtualBox 4.3.30.

Сделайте это в VirtualBox:

  1. Щелкните правой кнопкой мыши виртуальную машину, выберите «Настройки», а затем выберите «Сеть».

  2. Рядом с «Подключено к» выберите «Адаптер только для хоста». В качестве примечания: «Мостовой адаптер» также будет работать, проверьте документацию VirtualBox для получения более подробной информации о каждой опции.

Сделайте это внутри своей виртуальной машины:

  1. Найдите свой сетевой IP-адрес, открыв терминал и набрав ifconfig . Обратите внимание на IP-адрес, отображаемый рядом с eth0 в разделе «inet addr». Вы также можете увидеть свой IP-адрес, если щелкните значок «Сеть» в правом верхнем углу рабочего стола и выберите «Информация о подключении».

  2. Установите openssh-server, набрав в терминале следующее:

     sudo apt-get install openssh-server 
     
  3. На всякий случай перезапустите виртуальную машину.

Теперь вы можете подключиться из PuTTY, используя IP-адрес из шага 1 выше и порт 22.

13
27.01.2020, 19:28

Для Ubuntu 18.04 и VirtualBox 5.2:

  1. Создание хост-сетевого интерфейса

    я. В Virtualbox нажмите File/ Host Network Manager.

    II. Если у вас еще нет сетевого адаптера хоста (по умолчанию vboxnet0), нажмите Create.

  2. Включить только хост -Настройки адаптера для ВМ

    я. В Virtualbox щелкните правой кнопкой мыши свою виртуальную машину и выберите Settings.

    II. Нажмите Networkи выберите Adapter 2.

    III. Нажмите Enable Network Adapter.

    IV. Под Attached to:выберите Host-only Adapter. Имя адаптера, созданного на шаге 1, должно выглядеть как (по умолчанию vboxnet0).

  3. Настройка сетевых параметров в виртуальной машине

    я. Запустите свою виртуальную машину и проверьте, какой интерфейс был добавлен :ip a. Найдите интерфейс, у которого нет адреса inet. На моем это было enp0s8.

    II. Отредактируйте /etc/netplan/01-netcfg.yaml. например. sudo vi /etc/netplan/01-netcfg.yaml.

    III. В настройках исходного адаптера добавьте сведения о конфигурации :

    .
    enp0s8:
        addresses: [192.168.56.2/24]
        gateway4: 192.168.56.1
        dhcp4: no
    

    Это назначает статический IP-адрес для вашей виртуальной машины для удобства SSH. Если вы хотите, чтобы dhcpвместо этого обрабатывал адресацию, не указывайте адрес и конфигурацию шлюза и установите dhcp4на yes.

    iv.Перезагрузите файл конфигурации :sudo netplan apply.

  4. Подключение по SSH к вашей виртуальной машине

    я. Если вы не установили sshв ВМ :sudo apt install ssh.

    II. С вашего хост-компьютера подключитесь к виртуальной машине по SSH:ssh <username>@192.168.56.2.

6
27.01.2020, 19:28

Теги

Похожие вопросы