Вы используете Internet Explorer в качестве своего веб-браузера?
Когда Вы нажимаете: Инструменты-> интернет-Опции-> Соединения (вкладка)-> настройки локальной сети (кнопка) Вы видите "Использование автоматический сценарий конфигурации"? Раз так это - вероятно, веб-проблема прокси.
В противном случае затем, возможно, у Вас есть проблема брандмауэра, посредством чего маршрутизатор или даже Ваши веб-приложения, имеет список позволенного дюйм/с, который может просмотреть те веб-сайты; в этом случае Вам, вероятно, придется попросить, чтобы Ваш администратор сети предоставил Ваш доступ IP-адреса к тому веб-сайту.
Существует три основных подхода к проблеме запрета пользователю завершать программу. У всех есть недостатки, и ХОРОШЕГО решения вашей проблемы нет.
По сути, если у пользователя есть права администратора на машине, они будут иметь возможность завершить процесс (хотя они могут не знать как)
Подход 1 : Создайте любую программу, которую вы запускаете как службу, и отметьте ее как неудержимую. (недостатки: если вы используете Windows Vista и выше, он будет заблокирован в сеансе 0 и не сможет взаимодействовать с рабочим столом пользователя, однако вы все равно можете получать уведомления о входе в систему и выходе из системы и реагировать соответствующим образом.)
Подход 2 : Создать вспомогательное приложение, которое также запускает и перезапускает исходное приложение при завершении. Бонусные баллы, если вы создаете приложение для перезапуска вспомогательного приложения, если оно закрыто. (недостатков слишком много, чтобы перечислить, на данном этапе вы идете по пути вредоносного ПО.)
Подход 3 : Создайте дополнительную службу, которая отслеживает запрос на завершение процесса и отменяет его. Я не собираюсь больше объяснять, как это сделать, поскольку на ум приходит слово руткит.user @ myserver
Один из параллельных инструментов SSH (clusterssh, mssh, pssh) может вам подойти.
Например, используйте cssh для входа на все машины и добавьте ключ самостоятельно.
Это проблема с ssh-copy-id; он также добавляет ключ каждый раз, когда вы его запускаете. Если вы автоматизируете процесс, ваш файл authorized_keys быстро забивается повторяющимися ключами. Вот программа Python, которая позволяет избежать обеих проблем. Он запускается с управляющего сервера и помещает ключи с одного удаленного сервера на другой удаленный сервер.
import subprocess
def Remote(cmd,IP):
cmd = '''ssh root@%s '''%(IP)+cmd
lines = subprocess.check_output(cmd.split())
return '\n'.join(lines)
source = '123.456.78.90'
target = '239.234.654.123'
getkey = 'cat /root/.ssh/id_rsa.pub'
getauth = 'cat /root/.ssh/authorized_keys'
sourcekey = Remote(getkey, source).replace('\n','').strip()
authkeys = Remote(getauth, target).replace('\n','').strip()
if sourcekey not in authkeys:
keycmd=''' echo "%s" >>/root/.ssh/authorized_keys;
chmod 600 /root/.ssh/authorized_keys '''%(sourcekey) # A compound shell statement
print 'Installed key', Remote(keycmd,target)
else: print 'Does not need key'
Пара вещей, которые могут соответствовать всем требованиям:
Как упоминалось в других ответах, sshpass - это вероятно, самое простое решение.
Вместо того, чтобы вводить пароль несколько раз, вы можете использовать pssh
и его -A
переключитесь, чтобы запросить его один раз, а затем введите пароль на все серверы в списке.
ПРИМЕЧАНИЕ. Использование этого метода не позволяет использовать ssh-copy-id
, однако вам нужно будет применить свой собственный метод для добавления файла ключа публикации SSH в файл ~ / .ssh / authorized_keys
вашей удаленной учетной записи.
Вот пример, который выполняет эту работу:
$ cat ~/.ssh/my_id_rsa.pub \
| pssh -h ips.txt -l remoteuser -A -I -i \
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 23:03:58 [SUCCESS] 10.252.1.1
[2] 23:03:58 [SUCCESS] 10.252.1.2
[3] 23:03:58 [SUCCESS] 10.252.1.3
[4] 23:03:58 [SUCCESS] 10.252.1.10
[5] 23:03:58 [SUCCESS] 10.252.1.5
[6] 23:03:58 [SUCCESS] 10.252.1.6
[7] 23:03:58 [SUCCESS] 10.252.1.9
[8] 23:03:59 [SUCCESS] 10.252.1.8
[9] 23:03:59 [SUCCESS] 10.252.1.7
Приведенный выше сценарий обычно имеет такую структуру:
$ cat <pubkey> | pssh -h <ip file> -l <remote user> -A -I -i '...cmds to add pubkey...'
pssh
подробности cat
выводит файл открытого ключа в pssh
pssh
использует переключатель -I
для приема данных через STDIN -l <удаленный пользователь>
- это учетная запись удаленного сервера (мы предполагаем, что у вас одно и то же имя пользователя на всех серверах в IP-файле) -A
сообщает pssh
, чтобы запросить ваш пароль, а затем повторно использовать его для всех серверов, к которым он подключается. -i
указывает pssh
отправлять любой вывод в STDOUT, а не хранить его в файлах (поведение по умолчанию ) '... cmds для добавления pubkey ...'
- это самая сложная часть того, что происходит, поэтому я разобью это отдельно (см. Ниже) Это команды, которые pssh
будет запускаться на каждом сервере:
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
По порядку:
установите umask удаленного пользователя на 077, это так что для любых каталогов или файлов, которые мы собираемся создать, будут установлены соответствующие права доступа следующим образом:
$ ls -ld ~ / .ssh ~ / .ssh / authorized_keys
drwx ------ 2 remoteuser remoteuser 4096 21 мая, 22:58 /home/remoteuser/.ssh
-rw ------- 1 удаленный пользователь удаленный пользователь 771 21 мая 23:03 /home/remoteuser/.ssh/authorized_keys
создайте каталог ~ / .ssh
и проигнорируйте предупреждение, если он уже существует.
$ afile
с путем к файлу authorized_keys cat - >> $ afile
- принимает входные данные из STDIN и добавляет в файл authorized_keys sort -u $ afile -o $ afile
- однозначно сортирует файл authorized_keys и сохраняет его ПРИМЕЧАНИЕ: Это последний бит предназначен для обработки случая, когда вы запускаете вышеуказанное несколько раз на одних и тех же серверах. Это избавит вас от многократного добавления вашего pubkey.
Также обратите особое внимание на тот факт, что все эти команды заключены в одинарные кавычки. Это важно, поскольку мы не хотим, чтобы $ afile
оценивался до тех пор, пока он не будет запущен на удаленном сервере.
' \
..cmds... \
'
Я расширил приведенное выше, чтобы его было легче читать, но я обычно запускаю его все в одной строке, например так:
$ cat ~/.ssh/my_id_rsa.pub | pssh -h ips.txt -l remoteuser -A -I -i 'umask 077; mkdir -p ~/.ssh; afile=~/.ssh/authorized_keys; cat - >> $afile; sort -u $afile -o $afile'
Используя pssh
, вы можете отказаться от создания файлов и либо предоставлять динамический контент с помощью -h <(... some command ...)
или вы можете создать список IP-адресов с помощью другого переключателя pssh
, -H "ip1 ip2 ip3"
.
Например:
$ cat .... | pssh -h <(grep -A1 dp15 ~/.ssh/config | grep -vE -- '#|--') ...
Вышеупомянутое можно использовать для извлечения списка IP-адресов из моего файла ~ / .ssh / config
. Конечно, вы также можете использовать printf
для генерации динамического содержимого:
$ cat .... | pssh -h <(printf "%s\n" srv0{0..9}) ....
Например:
$ printf "%s\n" srv0{0..9}
srv00
srv01
srv02
srv03
srv04
srv05
srv06
srv07
srv08
srv09
Вы также можете использовать seq
для генерации последовательностей форматированных чисел!
pssh
Если вы не хотите использовать pssh
, как я сделал это выше, доступны другие варианты.
Я хочу подчеркнуть, насколько плохая идея:
Вот реализация, которая немного более безопасна ...
#!/usr/bin/python3
import os
import getpass
import argparse
parser = argparse.argument_parser()
parser.add_argument('-l','--login', action='store', help='username')
parser.add_argument('-p','--port', action='store', default='22', help='port')
parser.add_argument('-L','--list', action='store', help='file list of IPs')
parser.add_argument('-i','--ip-address', action='store', nargs='+', metavar='host' help='ip or list of ips')
args = parser.parse_args()
if not args.login:
print("You need a login, broski!")
return 0
if args.list:
ips = [i for i in open(args.list, 'r').readlines()]
passwd = getpass.getpass('Password: ')
for ip in ips:
cmd = 'ssh-id-copy {0}@{1} -p {2}'.format(ip,args.port,passwd)
os.system('sshpass -p ' + passwd + ' ' + cmd)
print("Key added: ", ip) # prints if successful
# ex: sshpass -p passwd ssh-id-copy login@1.1.1.1
elif args.host:
ip = args.host
cmd = 'ssh-id-copy {0}@{1} -p {2}'.format(ip,args.port,passwd)
os.system('sshpass -p ' + passwd + ' ' + cmd)
print("Key added: ", ip) # prints if successful
else:
print("No IP addresses were given to run script...")
return 0
Ответ Quanta довольно хорош, но он требует, чтобы вы поместили свой пароль в текстовый файл.
Из справочной страницы "sshpass":
Если опция не указана, sshpass читает пароль из стандартного input.
Итак, что вы можете сделать, так это захватить пароль один раз во время выполнения сценария, сохранить его в переменной, вывести пароль и передать его sshpass в качестве входных данных.
Я делаю это постоянно, и все работает нормально. Пример:
echo "Пожалуйста, введите пароль, используемый для входа по ssh на удаленном компьютере:"
читать -r USERPASS
для TARGETIP в $ @; делать
echo "$ USERPASS" | sshpass ssh-copy-id -f -i $ KEYLOCATION "$ USER" @ "$ TARGETIP"
сделанный