Вероятно, это неудовлетворительный ответ, но я так не думаю. Недавно я попытался удалить gnome из Fedora 29, чтобы перейти на i3. После настройки оконного менеджера я использовал $ sudo dnf group remove gnome-desktop
, чтобы «просто» избавиться от gnome, и после этого я даже не смог запустить xserver. Как вы сказали, $ dnf group remove gnome-desktop-environment
кажется устаревшим. Мне эта ветка тоже показалась интересной .
Правильный способ сделать это — либо настроить Pi на статический IP-адрес, чтобы он не менялся при перезагрузке, либо настроить локальный DNS-сервер для разрешения имени хоста. Настройка статического IP, безусловно, самая простая. Вы можете найти десятки руководств, если просто введете «raspbian static IP». Вот один:https://thepihut.com/blogs/raspberry-pi-tutorials/how-to-give-your-raspberry-pi-a-static-ip-address-update
Ваш скрипт не работает по множеству причин. Во-первых, это никогда не сработает:
call=`ssh user@192.168.0.$i`
Если машина не пускает вас или недоступна, то она напечатает ошибку, но эта ошибка будет напечатана в виде стандартной ошибки, а не стандартного вывода, поэтому $call
будет пустым. Если это сработает, и вы подключитесь к машине по ssh, вы войдете в систему, и снова $call
будет пустым, поскольку ничего не возвращается.
В любом случае ваш if
является синтаксической ошибкой. Это:
if [['$call'==*'user'*]]; then
должно быть так:
if [[ "$call" == *user* ]]; then
Вам нужны пробелы после и перед [[
и ]]
, и если вы поместите переменную в одинарные кавычки ('$call'
), тогда переменная не будет расширена:
$ echo '$call'
$call
Скорее всего, вы захотите войти в систему, запустить команду и, если она сработает, сохранить ip. Примерно так:
#!/bin/bash
for i in {1..100}
do
## try to run a command and, if it works, we know the ip.
## you can use the command 'true' for this
if ssh user@192.168.0.1.$i true; then
echo "The IP is 192.168.0.1.$i"
break
fi
done
Это, однако, очень, очень неэффективно и медленно. Не делай этого. Просто настройте статический IP. Некоторые другие варианты, которые могут помочь::
Получить список активных IP-адресов в сети
nmap -sP 192.168.0.*
Используйте ping
вместо ssh
, чтобы увидеть, какая машина включена:
for i in {1..100}
do
if ping -c1 192.168.0.$i 2>/dev/null; then
echo "The first IP that is UP is 192.168.0.1.$i"
break
fi
done
Но на самом деле, если вам нужна помощь в настройке статического IP-адреса, задайте об этом новый вопрос. Это просто не лучшее решение вашей проблемы.
Настройте веб-сервер на Pi, который возвращает «Это Pi of iam _agf». Или даже динамическая страница, которая возвращает IP, что-то вроде «192.168.0.15 iam _agf». Это делается для того, чтобы убедиться, что это именно ваше устройство, а не принтер или кофеварка.
Вы можете использовать nmap, чтобы увидеть, на каких IP-адресах работает веб-сервер, а затем проверить их, чтобы увидеть, содержат ли они ваше ключевое слово и IP-адрес.
Получив IP-адрес, поместите его в файл /etc/hosts, чтобы вы могли легко получить доступ к пи по имени.
Простая проверка, работает ли он без nmap, может занять некоторое время:
for i in $(seq 1 254); do
curl "http://192.168.0.${i}" | grep iam_igf
done
Есть плагин для nmap под названием ssh -brute,вы можете попробовать это с одной фиксированной комбинацией имени пользователя и пароля.https://nmap.org/nsedoc/scripts/ssh-brute.html
Также то, что вы, вероятно, искали изначально:
#this will open an ssh connection and wait for you to type stuff:
ssh user@IP
#this will run a command after the connection is open, then close it
ssh user@IP command
# example
ssh user@IP echo ok
# or just use the true command to avoid output
ssh user@IP true
# so this loop might do what you need, (untested, make backups of /etc/hosts first!)
for i in $(seq 1 254); do
if ssh "user@192.168.0.${i}" true;
then
sed -i "/[0-9.]* mypi/d" /etc/hosts
echo "192.168.0.${i} mypi" >> /etc/hosts
break
fi
done
Май
Для быстрого подключения используйте masscan
для сканирования активного хоста с ssh
портом:
sudo masscan 192.168.0.1/24 --ports 22 --rate 100000 > alive
awk '{print $6}' alive > file
while read -r line; do ssh user@"$line"; done < file
Еще лучше, один -вкладыш, как предлагают @terdon:
ssh user@$(sudo masscan 192.168.0.1/24 --ports 22 --rate 100000 | awk '{print $6}')
masscan
входит в состав некоторых дистрибутивов Linux.
ИспользуйтеmDNS
(avahi )для обнаружения IP-адреса. На удаленке должен быть запущен как минимум сервер и настроен, на локальном должен быть как минимум клиент. Это своего рода распределенный (больше, чем обычный )локальный DNS. Вы также можете попробовать сообщить DHCP вашего маршрутизатора о выделении статического IP-адреса.
Не делай этого так, если можешь.
Кроме того, не рискуйте раздражать ИТ-отдел вашего учебного заведения, поэтому не возитесь со статическими IP-адресами.
У вас есть преимущество в том, что вы знаете MAC-адрес вашего Pi
Если ты
Вы знаете, что он пошлет пакет, который вы сможете увидеть. Ждать его.
$ sudu tcpdump -ni interface arp and ether src 00:02:00:02:aa:76
Где interface
— сетевой интерфейс вашей удаленной системы, а 00:02:00:02:aa:76
— MAC-адрес Pi
Это наименее навязчивый метод. -Он не делает ничего, что могло бы произойти в любом случае, поэтому вы не попадаете в поле зрения ИТ-специалистов.
в вашей удаленной системе может быть установлено сканирование arp -
имеют права запускать arp -сканирование
Pi и ваша удаленная система могут работать в одной сети
затем вы можете спросить все хосты в вашей сети, какие у них MAC-адреса, и найти Pi
$ sudu arp-scan -li interface -NT 00:02:00:02:aa:76
Опять же,где interface
— сетевой интерфейс в вашей удаленной системе, а 00:02:00:02:aa:76
— MAC-адрес Pi
Это довольно ненавязчиво, поэтому никто не должен его замечать, кроме самых педантичных сетевых администраторов. NB Я не пробовал, (у меня всегда есть доступ к tcdump)
Если это невозможно, при условии, что Pi позволяет вам использовать /etc/dhcp/dhclient-exit-hooks
, чтобы отправлять вам по электронной почте конфигурацию сети каждый раз, когда она изменяется.
Одно и то же исправление заключается в том, чтобы запросить у администратора DHCP-сервера резервирование статического IP-адреса.
Pi будет использовать DHCP как обычно, но DHCP-сервер всегда будет давать ему один и тот же IP-адрес, который будет находиться внутри IP-сети, но, вероятно, вне диапазона выданных DHCP-адресов.
Утверждение и внедрение этого соглашения между вами и сетевыми администраторами -не имеет большого значения, но зависит от хороших рабочих отношений.