URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93279
[ Назад ]

Исходное сообщение
"Как заставить работать scp ?"

Отправлено je , 19-Апр-12 16:00 

Прошу помощи у сообщества. Кто знает как разрешить данную проблему, помогите.

Есть авторизаци c помощью LDAPа. Есть пользователь в LDAP.
И это пользователь не может копирывать фалы с помощь scp на ту машину где есть его учетка ( не может в Linux хотя в Windows с помощью WinSCP все копируеться ).

Для авторизации пользователей есть скрипт ( Python ) который выступает в роли оболочки для пользователя. Собственно что он делает.

1) Проверяет есть ли доступ к машине у пользователя ( pam_check_host модуль не подошел. Причина почему ? Не коректно отрабатывает иногда. А коректно должно быть постоянно когда у тебя 300 машин.)
2) Устанавлеваетья TMOUT переменная для пользователя при подключении ( В LDAP добавлен параметр TMOUT )
3) Получает оболочку /bin/bash.

Всего три функции выполняет скрипт.

По ssh вход без проблем. Но вот scp не копирует файлы.

Делал эксперементы, копирование проводилось на тот хост где есть учетка в LDAP.

Для наглядности как копировал:
cat /iotop-0.4.4-1.noarch.rpm | ssh USER@HOSTNAME "cat >/tmp/file"
Что бы увидеть что происходит, потому как scp просто ждет.

И получаю слудующую ошибку:

/bin/bash: строка 1: #��/sn�d44ac02136b83884a0630a6e0c40b36cced53bb6#}
/bin/bash: строка 2: ошибка синтаксиса около неожиданной лексемы `('
/bin/bash: строка 2: `##$!#

И копирование проводилось на хост где нет учетки в LDAPe.
Все скопировалось.

Что вижу из этого, мой /bin/bash.py не принемает каких-то параметров от scp что бы их передать /bin/bash, и вываливаеться ( ждет ). Понимаю что /bin/bash это ПОДОБОЛОЧКА для /bin/bash.py и scp просто не знает что ему делать. Вообщем
если написать вот такой скриптец:

cat >> /bin/bash.sh <<EOF
#!/bin/bash
/bin/bash
EOF
chmod 755 /bin/bash.sh

И это /bin/bash.sh прописать в passwd для пользователя как оболочку.
Так же ни чего копироваться не будет.

И что с этим делать ?


Содержание

Сообщения в этом обсуждении
"Как заставить работать scp ?"
Отправлено Z0termaNN , 20-Апр-12 11:58 
>[оверквотинг удален]
> что ему делать. Вообщем
> если написать вот такой скриптец:
> cat >> /bin/bash.sh <<EOF
> #!/bin/bash
> /bin/bash
> EOF
> chmod 755 /bin/bash.sh
> И это /bin/bash.sh прописать в passwd для пользователя как оболочку.
> Так же ни чего копироваться не будет.
> И что с этим делать ?

1. я бы запустил сервер в отладочном режиме
/usr/lib/sshd -d -d -e -D -p 2222
например
2. установил бы трассировку в login shell

cat > /bin/bash.sh <<EOF
!/bin/bash
exec /bin/bash -o xtrace
EOF


"Как заставить работать scp ?"
Отправлено LSTemp , 27-Апр-12 17:59 
>[оверквотинг удален]
> должно быть постоянно когда у тебя 300 машин.)
> 2) Устанавлеваетья TMOUT переменная для пользователя при подключении ( В LDAP добавлен
> параметр TMOUT )
> 3) Получает оболочку /bin/bash.
> Всего три функции выполняет скрипт.
> По ssh вход без проблем. Но вот scp не копирует файлы.
> Делал эксперементы, копирование проводилось на тот хост где есть учетка в LDAP.
> Для наглядности как копировал:
> cat /iotop-0.4.4-1.noarch.rpm | ssh USER@HOSTNAME "cat >/tmp/file"
> Что бы увидеть что происходит, потому как scp просто ждет.

ИМХО оригинально. посылать на вход ssh содержимое rpm.... он конечно читать будет, но вот как интерпритирует...

>[оверквотинг удален]
> что ему делать. Вообщем
> если написать вот такой скриптец:
> cat >> /bin/bash.sh <<EOF
> #!/bin/bash
> /bin/bash
> EOF
> chmod 755 /bin/bash.sh
> И это /bin/bash.sh прописать в passwd для пользователя как оболочку.
> Так же ни чего копироваться не будет.
> И что с этим делать ?


"Как заставить работать scp ?"
Отправлено je , 28-Апр-12 10:15 
>[оверквотинг удален]
>> что ему делать. Вообщем
>> если написать вот такой скриптец:
>> cat >> /bin/bash.sh <<EOF
>> #!/bin/bash
>> /bin/bash
>> EOF
>> chmod 755 /bin/bash.sh
>> И это /bin/bash.sh прописать в passwd для пользователя как оболочку.
>> Так же ни чего копироваться не будет.
>> И что с этим делать ?

"За что купил за то продал". Знаешь есть такая пословица ? Это я к тому что послал в ssh то и получил ...


"Как заставить работать scp ?"
Отправлено LSTemp , 11-Май-12 06:04 
> "За что купил за то продал". Знаешь есть такая пословица ? Это
> я к тому что послал в ssh то и получил ...

а я к тому, что зачем rpm-ы-то по ssh ;)? если только в качестве примера... или мания преследования заела? )



"Как заставить работать scp ?"
Отправлено apt , 04-Май-12 09:47 

>> cat /iotop-0.4.4-1.noarch.rpm | ssh USER@HOSTNAME "cat >/tmp/file"
> ИМХО оригинально. посылать на вход ssh содержимое rpm.... он конечно читать будет, но вот как интерпритирует...

откроет на удаленном хосте указаную команду и передаст ей стандартный ввод. Обычно это так происходит. Есть даже такой паттерн для копирования между хостами --

( cd  /path/ && tar cf - dirtocopy ) | ssh user@host "cd /path && tar xfvp -"


"Как заставить работать scp ?"
Отправлено LSTemp , 11-Май-12 05:16 
>>> cat /iotop-0.4.4-1.noarch.rpm | ssh USER@HOSTNAME "cat >/tmp/file"
>> ИМХО оригинально. посылать на вход ssh содержимое rpm.... он конечно читать будет, но вот как интерпритирует...
> откроет на удаленном хосте указаную команду и передаст ей стандартный ввод. Обычно
> это так происходит. Есть даже такой паттерн для копирования между хостами
> --
> ( cd  /path/ && tar cf - dirtocopy ) | ssh
> user@host "cd /path && tar xfvp -"

спасибо, Кэп. только командой в данном случае является "рукодельный" шелл и ОН стандартный ввод обработать должен. как я уже сказал - он его прочитает, но вот что с ним сделает - это другой вопрос. как-то так...



"Как заставить работать scp ?"
Отправлено apt , 04-Май-12 09:43 

> И что с этим делать ?

ну, во-первых, у ssh (и scp) есть целых три ключа -v, можно посмотреть, чего он ждет. Во вторых, то, что у пользователя в качестве оболочки в /etc/passwd должно быть прописано в /etc/shells. Кроме того, что значит "для авторизации есть скрипт"? Где точка запуска скрипта? Он подключен, как модуль pam или стоит, как оболочка в passwd? Что сказано в логах по поводу этих коннектов? Кроме того, в мане к ssh должно быть написано в какой последовательности запускается шелл для пользователя, rtfm.



"Как заставить работать scp ?"
Отправлено je , 07-Май-12 13:12 

> 1 ) ну, во-первых, у ssh (и scp) есть целых три ключа -v. можно
> посмотреть, чего он ждет

Ну мне вообщем известно что есть, но вот не известно чего он ждет.

> 2) Во вторых, то, что у пользователя в
> качестве оболочки в /etc/passwd должно быть прописано в /etc/shells.

Прописано.

> 3) Кроме того,
> что значит "для авторизации есть скрипт"?

А то и значит что для авторизации.

> 4) Где точка запуска скрипта?

Не совсем понял.

> 5) Он
> подключен, как модуль pam или стоит, как оболочка в passwd?

Стоит как оболочка в passwd.

> 6) Что
> сказано в логах по поводу этих коннектов?

Ни че го ... просто ждет чего-то.


"Как заставить работать scp ?"
Отправлено LSTemp , 11-Май-12 05:06 
>[оверквотинг удален]
> cat >> /bin/bash.sh <<EOF
> #!/bin/bash
> /bin/bash
> EOF
> chmod 755 /bin/bash.sh
> И это /bin/bash.sh прописать в passwd для пользователя как оболочку.
> Так же ни чего копироваться не будет.
> И что с этим делать ?

ЕЩЕ РАЗ!!! КАК ИНТЕРПРИТИРУЕТ рукодельный шелл передаваемые ему данные?!!! ответ: в данном случае никак. просто запускается копия bash, которая ждет ввода команды.

а как на счет такого "bash.sh" например?

#!/bin/bash
shift
eval $*

различия видно?

PS
не проще ли sftp использовать для копирования файлов?


"Как заставить работать scp ?"
Отправлено LSTemp , 11-Май-12 06:24 
#!/bin/bash
if [ $# -eq 0 ]
then
   # шелл
   /bin/bash
else
   # команда
   shift
   eval $*
fi

итд по мере фантазии и надобности.



"Как заставить работать scp ?"
Отправлено je , 14-Май-12 12:08 
>[оверквотинг удален]
> if [ $# -eq 0 ]
> then
>    # шелл
>    /bin/bash
> else
>    # команда
>    shift
>    eval $*
> fi
> итд по мере фантазии и надобности.

Если бы вот это еще и чере python  работало было бы замечательно. У меня при подключении вызываеться python скрипт, а только потом выдаеться bash.


"Как заставить работать scp ?"
Отправлено LSTemp , 17-Май-12 01:21 
>[оверквотинг удален]
>>    /bin/bash
>> else
>>    # команда
>>    shift
>>    eval $*
>> fi
>> итд по мере фантазии и надобности.
> Если бы вот это еще и чере python  работало было бы
> замечательно. У меня при подключении вызываеться python скрипт, а только потом
> выдаеться bash.

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

выкладывай_исходник/ думай_сам / http://natribu.org/



"Как заставить работать scp ?"
Отправлено je , 17-Май-12 13:26 
>[оверквотинг удален]
>>> fi
>>> итд по мере фантазии и надобности.
>> Если бы вот это еще и чере python  работало было бы
>> замечательно. У меня при подключении вызываеться python скрипт, а только потом
>> выдаеться bash.
> если наводок не понимаешь то:
> с одного языка на другой перевести не можешь?
> или думаешь, что тут телепаты есть, чтоб парсить твой неизвестный код на
> питоне?
> выкладывай_исходник/ думай_сам / http://natribu.org/

#!/usr/bin/env python

import os
import ldap
import pwd
import socket
import sys

def basH( tmout ):
    os.system('\n \
       if [ -f $HOME/.bashrc ]; \n \
          then \n \
       echo -en "" \n \
           cat $HOME/.bashrc | \
           sed -e \'1,1d\' > /tmp/rcfile-tmp.$$ \n \
           cat /tmp/rcfile-tmp.$$ | \
           sed -e \'export TMOUT=' + str( tmout ) + ' ; readonly TMOUT\' > /tmp/rcfile-bash.$$ ; \
           mv /tmp/rcfile-bash.$$ $HOME/.bashrc \n \
           rm -f /tmp/rcfile-tmp.$$ \n \
           /bin/bash \n \
       fi \
       else \n \
          echo "export TMOUT=' + str( tmout ) + ' ; readonly TMOUT" > $HOME/.bashrc \n \
          echo "" >> $HOME/.bashrc \n \
          echo "alias rm=\'rm -i\'" >> $HOME/.bashrc \n \
          echo "alias cp=\'cp -i\'" >> $HOME/.bashrc \n \
          echo "alias mv=\'mv -i\'" >> $HOME/.bashrc \n \
          echo "" >> $HOME/.bashrc \n \
          echo "if [ -f /etc/bashrc ]; then" >> $HOME/.bashrc \n \
          echo "     . /etc/bashrc" >> $HOME/.bashrc \n \
          echo "     fi" >> $HOME/.bashrc \n \
          echo -en "" \n \
          /bin/bash \n \
       fi \
       ')

try:
serverldap = socket.gethostbyname( ' HOSTNAME ' )
l = ldap.initialize("ldaps://" + serverldap + ":636")
l.simple_bind_s("","")
login =  pwd.getpwuid(os.getuid())[0]
base_dn = "ou=People,o=BASENAME"
filter  = "(uid=" + login + ")"
findUID = str("uid=") + login + str(",ou=People,o=BASENAME")
userUID = str("uid=") + login
except ldap.SERVER_DOWN:
       basH( tmout='950' )
       sys.exit()
try:
try:
   ldapHostIp = dict =  l.search_s( findUID, ldap.SCOPE_BASE, userUID )[0][1]
   ldapHostIp = ldapHostIp.get('host')
except TypeError:
   pass
except ldap.NO_SUCH_OBJECT:
   sys.exit()

try:
try:
   tmout = dict =  l.search_s( findUID, ldap.SCOPE_BASE, userUID )[0][1]
   tmout = tmout.get('TMOUT')
except TypeError:
   pass
except ldap.NO_SUCH_OBJECT:
   sys.exit()

if tmout:
   for i in tmout:
       tmout = i
else:
   tmout = 0

ipaddr = os.popen('cat /etc/sysconfig/network-scripts/ifcfg-* | grep IPADDR | grep -v 127').read()
ipaddr = ipaddr.split('IPADDR=')

ip = []
for i in ipaddr:
    ip.append(i[:-1])
ip = ip[1:]

A = ldapHostIp
B = ip

import sys
import os

for host in A:
    for ipaddr in B:
    try:
           if socket.gethostbyname( host ) == ipaddr:
              basH( tmout )
        except socket.gaierror:
          pass
        if '*' == host:
              basH( tmout )
          break
        if '!ALL' == host:
            pass


Для не телепатов :)


"Как заставить работать scp ?"
Отправлено je , 17-Май-12 15:41 
Да, и рассказывать мне о всяких там pam ldap не надо. Мол, "А нафига тебе скрипт этот, ты что не знал что есть pam_check_host_attr, или тебе делать нефиг велосипед изобретать ?".

"Как заставить работать scp ?"
Отправлено LSTemp , 20-Май-12 08:04 
ты выдаешь bash в качестве оболочки. как говорит авторитетный товарисч Lavr - читай выше до просветления.

PS
последняя попыдка наводки: bash - это интерпритатор команд, он ничего не копирует и ничего вообще не делает, пока ему команду не передадут. он просто ждет ввода команды.


"Как заставить работать scp ?"
Отправлено jenya , 20-Май-12 08:47 
> ты выдаешь bash в качестве оболочки. как говорит авторитетный товарисч Lavr -
> читай выше до просветления.
> PS
> последняя попыдка наводки: bash - это интерпритатор команд, он ничего не копирует
> и ничего вообще не делает, пока ему команду не передадут. он
> просто ждет ввода команды.

Вообще я знаю что такое баш.
Короче ладно, наводку получил буду разбираться.


"Как заставить работать scp ?"
Отправлено LSTemp , 20-Май-12 09:14 
> Вообще я знаю что такое баш.
> Короче ладно, наводку получил буду разбираться.

Странно тогда, что ты не передаешь никакую командную строку ему (для начала) и ожидаешь, что он что-то сделает.

для scp bash вообще ничего не значит. просто проверка, что у пользователя есть доступ к шелу на компе - дополнительня проверка вшивости. если хочешь, чтоб копировало - создавай свою оболочку, которая реальные действия выполняет и ей управление передавай. Выше все уже показал.