Как ssh обрабатывает 2 компьютера в локальной сети с одним и тем же именем пользователя?

Предположения: вы хотите разделить папку, содержащую тысячи файлов общим размером более 700 МБ, на отдельные каталоги по 700 МБ каждый, готовые для записи на несколько компакт-дисков.

В Linux вы можете использовать сценарий вроде dsplit или dirsplit - часть genisoimage (в Debian / Ubuntu). Если вы предпочитаете Windows / Wine, вы можете использовать такое приложение, как Folder Axe .

Примеры

Тестовый сценарий

# Create 2000 files of 1MB (sparse) each.
mkdir allimages && cd $_
for i in {1..2000}
do 
     dd if=/dev/zero of=image$i.jpg bs=1 count=0 seek=1M
done

Теперь у меня есть 2000 файлов (2 ГБ), которые я хочу разделить на 3 каталога.

$ ls -la | tail
-rw-rw-r--  1 cmihai cmihai 1048576 Dec  4 12:54 image992.jpg
-rw-rw-r--  1 cmihai cmihai 1048576 Dec  4 12:54 image993.jpg

Установить дирсплит. В ubuntu он включен в пакет genisoimage .

$ apt-cache search dirsplit
genisoimage - Creates ISO-9660 CD-ROM filesystem images

$ sudo apt-get install genisoimage

dirsplit

# Get usage / help
dirsplit -H

# Dry run (get list of changes):
dirsplit --no-act --size 700M --expmode 1 allimages/

# Actual run:
$ dirsplit --size 700M --expmode 1 allimages/
Building file list, please wait...
Calculating, please wait...
....................
Calculated, using 3 volumes.
Wasted: 105254 Byte (estimated, check mkisofs -print-size ...)

# List of files per directory can be found in catalog files you can use with mkisofs.
$ ls
allimages  vol_1.list  vol_2.list  vol_3.lis

dsplit

Примечание: по умолчанию файлы жестко привязаны к источнику

$ wget https://raw.githubusercontent.com/mayanez/dsplit/master/dsplit.py

$ python dsplit.py -s 700 -v allimages/ out/
Volume 01:
  allimages/: 700 files (700.00 MB).
Total: 700.00 MB (700 files, 1 dirs)
Volume 02:
  allimages/: 700 files (700.00 MB).
Total: 700.00 MB (700 files, 1 dirs)
Volume 03:
  allimages/: 600 files (600.00 MB).
Total: 600.00 MB (600 files, 1 dirs)

Проблемы:

  • Я использовал разреженные файлы в своем тесте - вы захотите проверить, как dsplit / dirsplit обрабатывает разреженные файлы, жесткие и программные ссылки.

2
21.07.2018, 17:29
2 ответа

Что касается вашего вопроса:

However, how does ssh handle the possibility of two machines on the local network having the same username? Is there a flag to differentiate between user bob on machine A vs a different user bob on machine B, or does ssh throw an error?

Каждая система Linux по умолчанию управляет своими пользователями, группами и паролями локально в 3 файлах.

  • /etc/password

    $ head -4 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    user1:x:1001:1001::/home/user1:/bin/bash
    
  • /etc/shadow

    $ head -4 /etc/shadow
    root:$1$jmJYUghS$AxysSW9MzG6AmmweysZsi1::0:99999:7:::
    bin:*:17110:0:99999:7:::
    daemon:*:17110:0:99999:7:::
    user1:!!:17717:0:99999:7:::
    
  • /etc/group

    $ head -4 /etc/group
    root:x:0:
    bin:x:1:
    daemon:x:2:
    user1:x:1001:
    

В этих файлах находятся фактические числа. Вы можете увидеть их в этой строке из файла /etc/password:

    user1:x:1001:1001::/home/user1:/bin/bash

Что соответствует идентификатору пользователя (UID )и идентификатору группы (GID )из 1001 и 1001. Если бы мы перечислили домашний каталог этого user1, вы увидите эти там тоже такие же цифры:

$ ls -lnd /home/user1
drwx------ 4 1001 1001 4096 Jul 12 00:05 /home/user1

ПРИМЕЧАНИЕ.:В приведенной выше команде мы указываем lsотображать номера, в противном случае по умолчанию отображаются имена:

$ ls -ld /home/user1
drwx------ 4 user1 user1 4096 Jul 12 00:05 /home/user1

Как насчет SSH

Когда вы sshпереходите на другой сервер и включаете пользователя для входа в систему как:

$ ssh user1@server1.mydom.com

вы выполняете аутентификацию по локально сохраненным на этом сервере «подробным сведениям» о данном пользователе. С SSH это немного сложнее, так как вы обычно будете использовать пару закрытый/открытый ключ для входа на сервер через ssh.

примеры файлов пары ключей
$ ls -l ~/.ssh/id_rsa*
-rw------- 1 root root 1675 Jul 21 00:50 /root/.ssh/id_rsa
-rw-r--r-- 1 root root  394 Jul 21 00:50 /root/.ssh/id_rsa.pub

В этом сценарии, когда вы sshотправляете «секреты» на удаленный сервер, используя приватную часть пары ключей SSH пользователя, на сервере находится общедоступная часть пары ключей, которую сервер можно использовать, чтобы подтвердить, что вы на самом деле тот, за кого себя выдаете.

Вот, например, часть вашего закрытого ключа:

мой ноутбук
$ ssh-keygen -l -f ~/.ssh/id_rsa
2048 SHA256:HvNN38AS9H7tIHaaE+51lqv6bgL7AmyDdqHIZIyBimg root@centos7 (RSA)

Если мы рассмотрим клиент, в котором этот пользователь может sshиспользовать пару ключей:

удаленный сервер X
$ ssh-keygen -l -f ~user1/.ssh/authorized_keys
2048 SHA256:HvNN38AS9H7tIHaaE+51lqv6bgL7AmyDdqHIZIyBimg root@centos7 (RSA) 

Обратите внимание на совпадение ключей.

2
27.01.2020, 21:48

Я думаю, что комментарий Гордона Дэвиссона правильно указывает на ваше непонимание:

I think there's a fundamental misunderstanding here: ssh never uses the username to decide which computer to connect to. It simply connects to a specified destination IP address (maybe specified via a name) and TCP port number; that might get redirected by a NAT router to a local computer, but if so that's done based on the IP and port numbers, not the username.

И это на 100% верно для стандартных инсталляций SSH :если вы подключаетесь к bob@example.com, он не будет искать другие хосты для имени пользователя.

Однако возможно, что example.comможет перенаправить соединение на другой компьютер. Я иногда видел системы, которые позволяют sshсначала подключиться, а затем перенаправить на основе имени пользователя. Однако это не стандартное поведение SSH, и цель будет полностью зависеть от правил перенаправления, установленных на сервере.

4
27.01.2020, 21:48

Теги

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