Самый простой способ настроить нового пользователя с SSH-доступом на удаленном хосте, если у вас есть root-доступ

Я пишу учебное пособие по настройке Ceph на жесткий путь, оболочка полностью.

Я недоволен количеством команд ssh, которые требуется для подключения к удаленному хосту с правами root, create новый пользователь, а затем клавиши scp поверх ... там должен быть более умный, более простой способ - особенно на Ubuntu.

Вот точная проблема: локальный пользователь FOO, имеющий доступ к удаленному серверу с пользователем ROOT, должен (и, возможно, пользователя) для пользователя CEPH. Повторите n раз с n удаленных хостов.

Любые умные однострочные ящики отсутствуют?

текущие шаги:

scp -i digitalocean id_rsa.pub storage-1:/root
ssh -i digitalocean storage-1
useradd ceph
mkdir ~ceph/.ssh
cat id_rsa.pub >> ~ceph/.ssh/authorized_keys
chmod 700 ~ceph/.ssh
chmod 600 ~ceph/.ssh/authorized_keys 
chown ceph:ceph ~ceph/.ssh/authorized_keys 
chown ceph:ceph ~ceph/.ssh/
rm id_rsa.pub
1
задан 9 May 2015 в 13:25

3 ответа

Часть вашей проблемы заключается в создании .ssh. Я бы использовал ssh-keygen, который создаст его, если он не существует и правильно установит права доступа (и, конечно же, создаст пару ключей для пользователя).

$ scp -i digitalocean id_rsa.pub storage-1:/tmp
$ ssh digitalocean storage-1 '
adduser --gecos "" --disabled-password  ceph
echo | sudo -u ceph ssh-keygen  -N "" -f ~ceph/.ssh/id_rsa 
sudo -u cp /tmp/id_rsa.pub ~ceph/.ssh/authorized_keys
'

Примечания :

использовать adduser вместо useradd - он создает домашний каталог скелета, начиная с /etc/skel. --gecos "" и --disabled-password используются, чтобы избежать запроса. Если вы не пропустите подсказки для имени и пароля, вы пропустите эти параметры. ssh-keygen может создать .ssh с правом разрешения. Опять же, -N "" и -f ~ceph/.ssh/id_rsa используются, чтобы избежать запросов. Вы можете пропустить их, если не возражаете про подсказки для местоположения ключа (для которого по умолчанию это нормально) и если вы хотите установить парольную фразу. Ни .ssh, ни .ssh/authorized_keys не должны иметь 700 в качестве режима. Пока только владелец может писать им, это нормально (755 для .ssh и 644 для .ssh/authorized_keys просто отлично).
1
ответ дан 23 May 2018 в 21:45

Я нашел более общее решение, изменив ответ на этот вопрос, чтобы выполнить это, войдя в систему как другой пользователь:

 cat ~/.ssh/id_rsa.pub | ssh root@storage-1 'useradd ceph; umask 0077; mkdir -p ~ceph/.ssh; cat >> ~ceph/.ssh/authorized_keys && echo "Key copied"'
0
ответ дан 23 May 2018 в 21:45

Вы можете использовать ssh-copy-id для передачи вашего SSH-ключа на удаленный хост.

Пример:

mallard@steamroller:~$ ssh-copy-id mallard@puter
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'mallard@puter'"
and check to make sure that only the key(s) you wanted were added.

Он автоматически создает каталоги (например, .ssh) и устанавливает правильные разрешения.

0
ответ дан 23 May 2018 в 21:45
  • 1
    Ага. Проблема в этом случае заключается в том, что пользователь на целевой машине, к которой требуется добавить ключ, еще не найден ... нашел однострочное решение, изменяющее чужой умный shell-fu с хорошим перенаправлением stdout ниже. – 0xF2 28 August 2016 в 18:23

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

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