Перенаправьте сторону сервера пользователя SSH

Вы правы в этом echo И компания, кажется, не обрабатывает двоичный файл настолько хорошо. Я подозреваю, что нулевые символы повреждают поток слишком рано.

Можно преобразовать информацию об изображении в некотором основанном на ASCII формате. Например, это с base64:

$ pic=`base64 pic.jpeg`
$ echo $pic | base64 --decode > pic2.jpeg
$ diff pic*
$ echo $?
0
2
12.09.2014, 14:20
3 ответа

Я тестировал это в контексте виртуальной машины: SSH-сервер - это Cygwin (также VM-хост); клиент - это Arch Linux SSH (также VM-гость).

Я использовал следующий скрипт.
Я не хочу закрываться, поэтому мне не нужно копировать никакие двоичные файлы в папку общего доступа, а только скопировать открытый ключ. В любом случае, я думаю, что, используя внутренний sftp (не SSH), требования к двоичным файлам должны быть снижены.

#!/bin/sh      

## Setup SFTP access on server side
## using an alias user and to a subdir of the aliased user home
## ------------------------------------------------------------


## Customise
## Shared path inside the aliased user home
sharedpath="/home/jon/pub"
## Aliased user name
altuser="pub"
## Path to the public key of aliased user
pubkey=~/.ssh/pub_rsa.pub


## Add aliased user to /etc/passwd
user=`grep ^$USER /etc/passwd`
txt="$altuser:`echo $user | cut -d: -f2-5`" 
txt="$txt:$sharedpath:`echo $user | cut -d: -f7`" 
echo  $txt>>/etc/passwd


## Set user rules in sshd_config
txt="Match User $altuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
"
echo "$txt" >>/etc/ssh/sshd_config

## Copy the public key in the shared folder 
mkdir -p "$sharedpath/.ssh"
cp  "$pubkey" "$sharedpath/.ssh/"


## Format sftp line
echo "You can now run on the client (adjust paths accordingly):" 
echo "sftp -i ${pubkey%.*} $altuser@name.server.top"
2
27.01.2020, 22:00

Если это сработает, у вас, вероятно, должны быть:

  • ChrootDirectory / home / jon
  • домашний каталог pub в / etc / passwd просто установлен на / pub .

/ home / jon должен принадлежать root и быть доступным для записи только root root .

Вам также понадобится рабочий корневой каталог со всем необходимым в / home / jon , например bin (для оболочки), lib (общий libs), и т. д. (пароль для преобразования uid-to-name) и так далее.

Скорее всего, вам нужен не ChrootDirectory.

Вместо этого вы можете попытаться создать несколько записей в / etc / passwd с желаемыми именами пользователей с псевдонимами с разными домашними каталогами в / home / jon. Вы можете назначить те же числовые UID и GID, что и для пользователя jon .

Я не уверен, что аутентификация с открытым ключом будет работать удовлетворительно. Попробуйте и прокомментируйте.

2
27.01.2020, 22:00

Вы могли бы, вероятно, (AB) используют опцию autorizedKeyscommand для получения публичных ключей от всех домашних каталогов, хотя это кажется немного непрактичным.

Что касается Chrooting, внимательно прочитайте ChrootDirectory . Есть много вещей, которые вам понадобятся внутри Chroot для интерактивных сессий.

0
27.01.2020, 22:00

Теги

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