ProFTPD может использоваться таким образом, Вы описываете; его mod_sftp модуль поддерживает SCP, и он может использовать множество механизмов аутентификации пользователя. Перед вскакиванием необходимо быть осведомлены об этих фактах:
У меня есть личный опыт с помощью этого решения на крупном предприятии по точной причине, которую Вы обрисовываете в общих чертах - у удаленных пользователей не должно быть локальных системных учетных записей (сервисное требование для той конкретной базы пользователей). Единственный дополнительный протест, который я добавлю, состоит в том, что конфигурация может быть пугающей для выполнения той же степени пользовательского разделения, что типичная система считает предложение. К тому же чрезвычайно гибкая конфигурация ProFTPD предлагает более интересные возможности управления доступом, чем OpenSSH.
Если вы хотите использовать SSH, вы, очевидно, хотите установить ключи ssh для ввода без пароля, или вы будете вынуждены вводить пароль каждый раз. Ключи SSH, очевидно, гораздо более безопасны. Команда ssh может использоваться для отправки команды на пульт дистанционного управления, а затем выхода после завершения команды:
ssh root@remoteserver COMMAND
В вашем случае:
ssh root@remoteserver [yum,apt-get,etc] install package
Но без ключей ssh все равно придется подключить пароль. Если вы хотите запускать несколько одновременно, что-то простое, что вы можете сделать, это передать серверы в цикл for. НО снова без пароля ssh вам будет предложено ввести пароль при каждом подключении к серверу.
for i in remoteserver1 remoteserver2 remoteserver3; do ssh root@$i [yum,apt-get,etc] install package ; done
Существует также утилита под названием sshpass , которая может быть полезна для того, что вы ищете (никогда не использовали ее), но я бы рекомендовал ssh keys для простоты и безопасности.
-121--175174- Если используется e grep, что означает grep с расширенным синтаксисом regexp, то для передачи образца в sed необходимо добавить parametr -r (--regexp-extended)
или -E
в некоторых версиях.
Что касается вашего выражения, у вас есть дополнительный \
после c
, поэтому даже с egrep он не соответствует
Кроме того, лучше использовать \1
вместо $1
для обратного сопоставления.
Поэтому окончательная команда может быть:
sed -rn 's:\./(RFF.*)( .* -c)\$\{COND\}:./\1\2\1:gp'
Или
sed -rn 's:(\./(RFF\S*) \S* -c)\$\{COND\}:\1\2:gp'
-121--161375- Найдена!!
Похоже, что в Ubuntu записи в ~/.ssh/известных узлах _
хэшированы , поэтому завершение SSH не может их прочитать. Это функция, а не ошибка. Даже при добавлении HashKnureHosts no
в ~/.ssh/config
и /etc/ssh/ssh _ config
мне не удалось предотвратить хэширование хоста.
Однако хосты, которые меня интересуют, также находятся в ~/.ssh/config
. Вот скрипт для Bash Completion, который считывает записи из этого файла:
_ssh()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* 2>/dev/null | grep -v '[?*]' | cut -d ' ' -f 2-)
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
Поместите этот скрипт в /etc/bash _ completion.d/ssh
, а затем отправьте его с помощью следующей команды:
$ . /etc/bash_completion.d/ssh
Я нашел это руководство бесценным, и я не смог бы создать сценарий без него. Спасибо Стиву Кемпу за написание этого потрясающего руководства!
Вы не говорите, какой дистрибутив вы используете, но на моей системе Fedora 19 у меня установлен следующий пакет, bash-completion
, который предоставляет эту возможность с помощью этого файла с правилами завершения:
/usr/share/bash-completion/completions/ssh
Вот пакет, который я установил:
$ rpm -aq |grep completion
bash-completion-2.1-2.fc19.noarch
Если вы посмотрите в этот файл правил, вы увидите строфы, которые опрашивают $HOME/. ssh/config
файл:
$ grep config /usr/share/bash-completion/completions/ssh
local configfile
local -a config
# Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -a -F "$configfile" "$cur"
local configfile
# Search COMP_WORDS for '-F configfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -a -F "$configfile" "$cur"
local configfile prefix
# Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
configfile="$(dequote "${1:2}")"
[[ $1 ]] && configfile="$(dequote "$1")"
_known_hosts_real -c -a -F "$configfile" "$cur"
я также нашел Gist, known_hosts_autocomplete.sh, который делает нечто похожее, за исключением файла $HOME/.ssh/known_hosts
.
# add to ~/.bash_profile, and close/reopen a shell. Will autocomplete any
# hosts found in known_hosts.
complete -W "$(echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | \
sed -e s/,.*//g | uniq | grep -v "\["`;)" ssh
Вы можете сделать нечто подобное, используя ваш файл $HOME/.ssh/config
, если по какой-то причине вы не можете найти файл с правилами завершения для ssh
, уже упакованного.
на Ubuntu 14.04, SSH
SSH Автообслуживание серверов, упомянутых в вашем ~ / .ssh / config
Я заметил это, когда я понял, что Только один из серверов, которые я обычно доступа к автоматической завершенной. Единственное различие между двумя была записью в файле конфигурации SSH, который был связан с аутентификацией. Когда я добавил новую запись в файл конфигурации для другого сервера, он также начал заполнять.
Вот запись для тех, кто спрашивает:
HOST server-name
GSSAPIAuthentication=no
Я был бы очень удивлен, если это имело значение то, что вы указали на конфиге (до сих пор, пока он все еще действителен, конечно).
Я обнаружил, что автозаполнение не работало, потому что хэши Ubuntu известные хосты. Вы можете добавить
Host *
HashKnownHosts no
на ваш .ssh / config
файл, но существующие хосты не будут не хешированы.
Чтобы включить автозаполнение ssh в Debian и Ubuntu:
sudo apt-get install bash-completion
Обратите внимание, что это не имеет ничего общего с хешированием known_hosts, наоборот к сказанному выше и исходному вопросу. Если вы хотите выполнить автозаполнение из known_hosts, тогда, конечно, вам придется отключить хеширование, но это настоятельно не рекомендуется.
Например, у меня есть:
Host *
HashKnownHosts yes
в моем .ssh / config, и у меня все еще есть автозаполнение ssh, отлично работающее с хостами, перечисленными в .ssh / config и / etc / hosts. Вам нужно добавить хост в .ssh / config, как указано в OP:
Host my-awesome-host Имя хоста the.real.host.name
(Или вы можете добавить хост запись в / etc / hosts, который является еще одним источником сценариев Debian / Ubuntu.)
Затем вы можете просто ввести ssh my-awe
, и он будет автоматически завершен. Опять же, это даже если вы HashKnownHosts, что настоятельно рекомендуется. (Обратите внимание, что завершение bash должно быть включено в вашей оболочке bash, и вам нужно специально установить эти сценарии, как указано выше, для вашего дистрибутива.)
Затем добавьте эти строки в свой .bashrc
, чтобы включить его (требуется выход и повторный вход в систему, или просто введите новый bash
, чтобы запустить новую оболочку. (Вам не нужно включать, если он уже включен в /etc/bash.bashrc
и / etc / profile
источниках /etc/bash.bashrc
) .
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Это включит автозаполнение ssh (среди прочего!) Из ~ / .ssh / config
, / etc / hosts
и т. Д.
Обратите внимание, что Debian по умолчанию ash вместо bash. Вы можете легко переключиться на bash:
sudo usermod -s /bin/bash "$USER"
(Вам нужно будет выйти и снова войти в систему, чтобы это вступило в силу.)
В CentOS 7 достаточно было yum install bash-completion
для автоматического завершения хостов из .ssh/config
при вводе ssh
и нажатии вкладки .