Предполагая, что вы все еще находитесь в пределах времени ожидания кэша учетных данных sudo (, если вы не уверены, просто обновите его с помощью sudo -v
перед запуском фрагмента ). Эта проблема возникает из-за того, что apt (-get )очень богатое консольное приложение и, таким образом, использует стандартный ввод, даже если он ничего не запрашивает у вас из-за -y
.
Это можно обойти, запустив весь фрагмент в подоболочке:
В приглашении начните с ввода (
, затем вставьте фрагмент, затем введите закрывающий )
и нажмите клавишу возврата
Это должно уйти.
Обратите внимание, что фрагмент кода не выполняется сразу после его вставки. Он скорее «ставится в очередь» в командной строке, ожидая закрытия скобок.
(PS :В зависимости от вашей системы вам может понадобиться использовать apt-get autoremove
вместо apt autoremove
, а также вам может понадобиться использовать -y
на update
и upgrade
также)
Вы можете вывести из строя сетевой интерфейс -, что нарушит все соединения, а не только TCP. Причем, строго говоря, и не "перезапускает" никакие "сетевые компоненты" (вроде DHCP-клиента ).
Если вы снова откроете интерфейс и убедитесь, что вы получили (или установили )тот же IP-адрес, соединения, для которых не истекло время ожидания, даже возобновятся.
Вы можете использовать правило iptables
. Что-то вроде этого:
$ sudo iptables -A INPUT -p tcp -m --cstate ESTABLISHED -j REJECT
илиtcpkill
(часть упаковкиdsniff
)
$ sudo tcpkill -i INTERFACE -9 TCPDUMP_FILTER
Обратите внимание, что в обоих случаях вам потребуется трафик, прежде чем они сработают. Если у вас запущен сеанс ssh
и вы запускаете что-то вроде:
$ sudo tcpkill -i INTERFACE -9 port 22
В обоих случаях соединение фактически будет разорвано только при наличии входящего/исходящего трафика (подойдет даже пакет проверки активности ). В противном случае они просто прервутся (, через них больше не будет проходить трафик ).
Если вы используете IPv6, с tcpkill
вам также нужно будет прервать их.
Примечания об удалении/добавлении интерфейса
Удаление интерфейса и его повторное создание с тем же IP-адресом НЕ является решением, потому что это может привести к тому, что вы вообще ничего не сделаете. Вы можете проверить это с помощью этой простой настройки:
$ sudo ip tuntap add mode tun example
$ sudo ip address add 192.0.2.1 dev example
Теперь на двух терминалах создайте сервер:
(terminal-1) $ nc -l -s 192.0.2.1 -p 9999
и клиент:
(terminal-2) $ nc 192.0.2.1 9999
Напишите бит с обеих сторон (клиент/сервер )и посмотрите, как это работает.
Теперь удалите интерфейс:
$ sudo ip link del example
Напишите еще немного с обеих сторон (вы заметите, что данные не передаются ), затем подождите, например, две минуты, и заново создайте ссылку:
$ sleep 120
$ sudo ip tuntap add mode tun example
$ sudo ip address add 192.0.2.1 dev example
Введите что-нибудь. Или подождите еще немного, и вы увидите, что ваше соединение возобновится, данные не будут потеряны.
В зависимости от вашего сервера/клиента (они могут прослушивать события интерфейса и сами разрывать соединение )результатом удаления/восстановления интерфейса может быть как минимум: