Команда SCP и/или SSH с паролем в строке

В ударе я рекомендую type -p which. which внешняя команда, и это время от времени хитро. Можно использовать sed удалить все после финала /, или используйте специального назначения dirname утилита.

cd "$(dirname -- "$(type -p program)")"
cd "$(type -p program | sed 's:[^/]*$::')"

На командной строке, если Вы знаете, что каталог не содержит специальных символов (пробел или \[?*), можно опустить кавычки. Можно также использовать одинарные левые кавычки вместо одного из $(…) (вложенные одинарные левые кавычки являются трудными, не стоят того здесь).

cd `dirname $(type -p program)`
cd $(dirname `type -p program`)
cd `type -p program | sed 's:[^/]*$::'`

В zsh существует более компактный синтаксис.

cd ${$(whence -p program):h}
cd ${$(echo =program):h}
cd ${${_+=program}:h}

(Да, тот последний является загадочным. Это использует ${VAR+TEXT} синтаксис на _ переменная, со значением тем, чтобы быть =program который эквивалентен $(whence -p program).)

2
02.11.2012, 19:26
1 ответ

Вы не должны делать двух соединений, чтобы сделать то, что Вы делаете. Принятие ssh-copy-id не будет работать на Вас, вот что-то из сценария, который я записал давным-давно (прежде чем я знал о ssh-copy-id), который делает это в одном ssh:

tar c $keys | ssh "$1" "set -e; cd \`mktemp -d\`; tar x; mkdir -p ~/.ssh; chmod go-w ~/.ssh; cat $keys >> ~/.ssh/authorized_keys; chmod go-w ~/.ssh/authorized_keys"

Да, это - одна огромная строка. $keys содержит названия всех открытых ключей (помните, это - старый сценарий):

keys=''
for k in identity.pub id_rsa.pub id_dsa.pub; do
        [ -e ~/.ssh/$k ] && keys="$keys $k"
done

Ключевой вещью является ssh, двоично-безопасный транспорт, таким образом, можно использовать его для передачи tar для объяснения файлов на той же сессии, как выполняет chmod, и т.д.

3
27.01.2020, 22:07
  • 1
    , я не думал о помещении содержания ключа в память... Я испытаю это. –  Kraden 02.11.2012, 20:20
  • 2
    я не попробовал эту точную вещь, но идею, был звуковым и теперь работает. ssh может повторить переменную в файл на удаленном сервере и в сущности "передать" тот файл. Действительно Вы просто создаете новый файл на удаленном сервере, который содержит ту же информацию.Примечание: Мне все еще предлагают пароль, но вместо него являющийся многократно, он просто однажды, который является тем, что я хотел. Еще раз спасибо! –  Kraden 03.11.2012, 00:21

Теги

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