Почему запрос ssh на «пароль» так долго появляется?

На самом деле, это можно сделать без задержки, но вместо этого с некоторыми хаками. Я написал небольшой скрипт, который позволит вам сделать это без задержки.

#!/bin/bash
######################################################################################
# Simple script to enable users to make screenshots of tooltips/menus/etc...         # 
# without timers                                                                     #
######################################################################################

######################################################################################
# Configuration Section (defaults)                                                   #
######################################################################################
SCREENSHOT_COMMAND="shutter -s"

# The keys can be found out using xinput test "keyboard name"
MODIFIER_KEY=133 #The <Super> Key (aka. Meta or Windows Key)f
CANCEL_KEY=54 # C
CAPTURE_KEY=27 # R

DAEMON_MODE="false" # change to true if you want to keep the script running after the screenshot was taken
VERBOSE="true" #Change this to any value if you dont want to have notifications

######################################################################################

######################################################################################
# Command parsing                                                                    #
######################################################################################

function usage {
    echo "$0 [-hemrcdn]"
    echo "-h prints this message"
    echo "-e <command> - execute that command instead of shutter"
    echo "-m <int> - The modifier key to use. Use xinput test <keyboar> to find out what is what"
    echo "-r <int> - The key to use for capture."
    echo "-c <int> - The key used for cancelling (only valid in non daemon mode)"
    echo "-d - daemon mode. Will keep on running after a screenshot was taken. to kill the daemon, use \"killall xinput\""
    echo "-n - disables notifications"
    exit;
}

while getopts "he:m:r:c:dn" flag
do
    if [ "$flag" == "h" ]; then
        usage
    fi
    if [ "$flag" == "e" ]; then
        SCREENSHOT_COMMAND=$OPTARG
    fi
    if [ "$flag" == "m" ]; then
        CAPTURE_KEY=$OPTARG
    fi
    if [ "$flag" == "r" ]; then
        SCREENSHOT_COMMAND=$OPTARG
    fi
    if [ "$flag" == "c" ]; then
        CANCEL_KEY=$OPTARG
    fi
    if [ "$flag" == "d" ]; then
        DAEMON_MODE="true"
    fi
    if [ "$flag" == "n" ]; then
        VERBOSE="false"
    fi
done

######################################################################################

KEYBOARDS=`xinput list | grep "slave" | grep "keyboard" | sed "s/[^a-zA-Z]*\(.*\)id=.*/\1/" | sed "s/[\t ]*$//"`

function run {
    MODIFIER_PRESSED="false"
    while read line;
    do
        COMMAND=`echo $line | awk '{print $2;}'`
        KEY=`echo $line | awk '{print $3;}'`
        if [ "$KEY" == "$MODIFIER_KEY" ]; then
            if [ "$COMMAND" == "press" ]; then
                MODIFIER_PRESSED="true"
            else 
                MODIFIER_PRESSED="false"
            fi
        fi 
        if [ "$KEY" == "$CAPTURE_KEY" -a "$MODIFIER_PRESSED" == "true" -a "$COMMAND" == "press" ]; then
            bash -c $SCREENSHOT_COMMAND
            if [ "$VERBOSE" == "true" ]; then
                notify-send "Taking Screenshot"     
            fi
            if [ "$DAEMON_MODE" == "false" ]; then
                quit
            fi
        fi
        if [ "$KEY" == "$CANCEL_KEY" -a "$MODIFIER_PRESSED" == "true" -a "$COMMAND" == "press" -a "$DAEMON_MODE" == "false" ]; then
            if [ "$VERBOSE" == "true" ]; then   
                notify-send "Canceling Screenshot"
            fi
            quit
        fi
    done;
}

function quit {
    killall -9 xinput
    exit
}

if [ "$VERBOSE" == "true" ]; then
    notify-send "Screenshot script waiting. Press Meta + R to capture the screenshot"
fi
IFS=$'\n'
for i in $KEYBOARDS
do
    unbuffer xinput test "$i" | run & 
done

Прежде чем вы сможете реально использовать скрипт (на ubuntu), вам нужно убедиться, что это большой взлом, но он работает и, безусловно, (для меня) более предпочтительным, чем использование задержки. у вас есть и unbuffer. Для этого просто выполните:

sudo apt-get install xinput expect-dev

Затем вы можете запустить скрипт. Сначала запустите его с опцией -h, чтобы просмотреть возможные параметры конфигурации. По умолчанию сценарий будет работать только один раз, и вы должны перезапустить скрипт после каждого скриншота (например, с помощью сочетания клавиш). Это связано с тем, что сценарий может иметь производительность неактивно. Если вы хотите запустить его как «демон», запустите его с опцией -d.

По умолчанию он также будет использовать затвор. Если вы хотите использовать что-то еще, используйте параметр -e, например. script.sh -c "ksnapshot"

По умолчанию кнопка захвата будет Meta + R. вы можете изменить это с помощью параметров конфигурации.

1
задан 15 September 2014 в 23:47

7 ответов

Дайте время процессу входа в систему и посмотрите, как долго он будет длиться:

[root@gislab00207 ~]# time ssh root@ISSLABNTL01
root@isslabntl01's password:
Last login: Fri Oct  4 07:55:03 2013 from 3.60.40.232

[root@ISSLABNTL01 ~]# exit
logout
Connection to ISSLABNTL01 closed.

real    0m45.192s
user    0m0.003s
sys     0m0.005s

You have new mail in /var/spool/mail/root
[root@gislab00207 ~]#

См. выше, потребовалось около 45 секунд для входа в систему -------- ОЧЕНЬ SLOW

Как только вы входите в систему как root, отредактируйте файл sshd_config и измените запись UseDNS, как показано ниже. Здесь я использую sed вместо редактирования файла.

[root@ISSLABNTL01 ~]# grep -i dns /etc/ssh/sshd_config
#UseDNS yes

[root@ISSLABNTL01 ~]# sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
[root@ISSLABNTL01 ~]# grep -i dns /etc/ssh/sshd_config
UseDNS no

[root@ISSLABNTL01 ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
[root@ISSLABNTL01 ~]# exit

Давайте попробуем время для входа в систему и посмотрим, как долго это займет.

[root@gislab00207 ~]# time ssh root@ISSLABNTL01
root@isslabntl01's password:
Last login: Fri Oct  4 07:55:03 2013 from 3.60.40.232

[root@ISSLABNTL01 ~]# exit
logout

Connection to ISSLABNTL01 closed.

real    0m6.192s
user    0m0.003s
sys     0m0.005s

You have new mail in /var/spool/mail/root
[root@gislab00207 ~]#

Посмотрите, как это взяли сейчас 6 секунд, время для ввода пароля.

12
ответ дан 25 May 2018 в 02:12
  • 1
    фантастический .. точка повторного времени .. использованиеDNS не исправлено это для меня .. У меня была аутентификация пароля, и задержка была для того, чтобы этот пароль вводил приглашение, чтобы появиться. Я ждал, чтобы это появилось, а затем ctrl-c, так что «время 'не включил меня в ввод пароля. – barlop 3 September 2014 в 07:09
  • 2
    Я могу подтвердить UseDNS no в /etc/ssh/sshd_config, исправил мою проблему – user 12 December 2016 в 10:13
  • 3
    Я могу подтвердить UseDNS no в /etc/ssh/sshd_config, исправил мою проблему – user 12 December 2016 в 10:13
  • 4
    Я могу подтвердить UseDNS no в /etc/ssh/sshd_config, исправил мою проблему – user 12 December 2016 в 10:13
  • 5
    Я могу подтвердить UseDNS no в /etc/ssh/sshd_config, исправил мою проблему – user 12 December 2016 в 10:13
  • 6
    Я могу подтвердить UseDNS no в /etc/ssh/sshd_config, исправил мою проблему – user 12 December 2016 в 10:13
  • 7
    Я могу подтвердить UseDNS no в /etc/ssh/sshd_config, исправил мою проблему – user 12 December 2016 в 10:13
  • 8
    UseDNS no Решено – Pandurang Patil 25 March 2017 в 19:37

Это неправильно с установкой Ubuntu.

Чтобы исправить это, вы должны изменить эту строку в /etc/nsswitch.conf:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

И изменить ее для этого:

hosts:          files dns
4
ответ дан 25 May 2018 в 02:12
  • 1
    Конфигурация Ubuntu не является неправильной. В некоторых случаях (домашние сети без центральных DNS-серверов) это правильно. В других (сети, где mDNS запрашивает тайм-аут), это плохо. – Gilles 23 January 2013 в 03:16
  • 2
    [NOTFOUND = return] не должно быть. – Neuquino 25 January 2013 в 23:47
  • 3
    @Neuquino Это должно быть . Это по какой-то причине вы, по-видимому, не понимаете. В Fiddling с вашим nsswitch.conf, подобным этому, возникает проблема, а не общее решение для медленного SSH. – gertvdijk 25 January 2013 в 23:47
  • 4
    Это кажется мне единственным решением, которое работает – linello 25 March 2016 в 13:45

В моем случае проблема может быть решена путем перезапуска systemd-logind:

systemctl restart systemd-logind

Это упоминается в Serverfault.

Я должен делать это регулярно, хотя, и Я не знаю, в чем главная причина проблемы.

3
ответ дан 25 May 2018 в 02:12

Отладочный вывод для ssh в моем случае просто остановился на 30 секунд, пока он был «подключен». Решение оказалось связанным с настройками DNS в моей локальной системе. Предыдущая конфигурация сети оставила за собой фиктивный DNS-сервер в файле /etc/resolv.conf. Замена его на текущий DNS-сервер устранила проблему.

1
ответ дан 25 May 2018 в 02:12

Для меня была изменена система dns до 127.0.0.1, прежде чем это был несуществующий хост.

nano /etc/resolv.conf

И напишите следующее

domain localdomain
search localdomain
(Removed this line) ===> nameserver 10.0.0.1
(Added this line) ===> nameserver 127.0.0.1
0
ответ дан 25 May 2018 в 02:12
  • 1
    Для меня этот файл, казалось, был /etc/resolv.conf (no e) – Shadow 14 April 2014 в 03:58

Я не так много знаю о среде плаката, как хотелось бы, но для других с аналогичной проблемой это может быть проблемой с sssd, которую мы используем для привязки ldap mojo.

Это происходит со мной:

$ time ssh server.example.com

real  2m0.018s
user  0m0.006s
sys   0m0.004s

Мне нужно получить доступ к серверу (в моем случае через консоль), затем выполните:

service restart sssd

После этого все работает. У меня не было времени отлаживать первопричину, но эта бандада работает для меня.

0
ответ дан 25 May 2018 в 02:12

Я могу решить медленное приглашение пароля с помощью ssh-issue, установив флажок Enable DNS Relay в настройках DHCP на моем маршрутизаторе dlink. Впоследствии соединения с SSH работали в течение секунды.

Network Settings -> Router Settings -> Enable DNS Relay [x]

Конфигурация по умолчанию перенаправляет каждый запрос DNS поставщику. Это было медленно, хотя я был связан с ssh pi@10.0.0.103. Подсказка к решению была запись в /etc/resolv.conf "поиск upc.at", который предоставляется через dhcp.

В руководстве по dlink указано:

When DNS Relay is enabled, DHCP clients of the router will be assigned 
the router's LAN IP address as their DNS server. All DNS requests that 
the router receives will be forwarded to your ISPs DNS servers. 
When DNS relay is disabled, all DHCP clients of the router will 
be assigned the ISP's DNS server.

После выпуска dhcp на клиенте и сервере соединение через SSH снова было быстрым. НТН.

0
ответ дан 25 May 2018 в 02:12

Другие вопросы по тегам:

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