Использование ssh через expect с передачей пароля без ввода

Простой скрипт, использующий интерпретатор expect для удаленного подключения к хосту по ssh без ввода пароля. Подключается, выводит информацию о системе через uname, закрывает соединение.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/expect -f

set timeout 2
set USER "agena"
set HOST "3"
set PASS "12345678"

spawn ssh $USER@192.168.0.$HOST
expect {
"(yes/no)?*" {
send "yes\r"
}
}
expect "word:"
send "$PASS\r"
expect "$*"
send "uname -a\r"
expect "$*"
send "exit\r"
expect eof
egax написал 11 месяцев,3 недель назад
egax написал 1 год назад

Количество файлов в каталоге

Считаем количество файлов в папке

ls | wc -l
egax написал 1 год,10 месяцев назад

Получить сведения о запущенном процессе/ах

В Linux получить список запущенных процессов можно командой

ps aux

список активных процессов

top

Узнать, запущен ли конкретный процесс:

ps -C xterm

В Windows, начиная с windows XP, есть полезная утилита wmic.

Например, узнать путь исполняемого файла процесса можно получить так

wmic process where (name="cmd.exe") get ExecutablePath
egax написал 3 лет,10 месяцев назад

Конвертор mp3-файлов в VBR-формат

Конвертор mp3-файлов в VBR-формат с хорошим качеством и небольшим размером.

Удобен для сжатия mp3-файлов с большим битрейтом (256, 320 Кб/с). Использует утилиты lame и id3info.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash
#
# Конвертор mp3-файлов в VBR-битрейт
# Вызов: bash mp3conv [каталог_с_mp3]
# egax

parse_tag ()
{
    retval=$(echo "$1" | grep -P "$2" | iconv -f CP1251 -t UTF-8)
    expr match "$retval" ".*:[ \\t]*\(.*\)"
}

cd "$1"
for curfile in *.mp3; do
    tag=$(id3info "$curfile")

    # берем поля тага
    title=$(parse_tag "$tag" TIT2)
    artist=$(parse_tag "$tag" TPE1)
    track=$(parse_tag "$tag" TRCK)
    year=$(parse_tag "$tag" TYER)
    album=$(parse_tag "$tag" TALB)

    newfile="$curfile"
    # новое имя файла $artist - [$track_]$title.mp3
    if [ ! -z "$artist" ] && [ ! -z "$title" ]; then
        if [ ! -z $track ]; then
            [ $track -lt 10  ] && track=0"$track"
            title="$track"_"$title"
        fi
        newfile="$artist"" - "$title".mp3"
    fi

    dirname=1
    # имя папки для новых файлов [$year_]$album
    if [ ! -z "$album" ]; then
        [ -z $year ] || album="$year"_"$album"
        dirname="$album"
    fi

    # создаем папку если не создана
    [ -d "$dirname" ] || mkdir "$dirname"
    newfile="$dirname"/"$newfile"

    # конвертим файл с VBR-битрейдом и копируем таги v2 и v1
    lame --vbr-new -B 192 "$curfile" "$newfile"
    id3cp -2 "$curfile" "$newfile"
    id3cp -1 "$curfile" "$newfile"
done
egax написал 4 лет,1 месяц назад

Перекодировка файлов из Windows в Linux

При копировании файлов с кириллицей из Windows в Linux их содержимое может быть не читабельным. Конвертим их, например, в utf8:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash
# 
# Конвертим рекурсивно файлы из кодировки Windows в Юникод из каталога $1

export TMP_F=`mktemp`

trap "rm -f $TMP_F" EXIT

find "$1" -name \*.txt -print|while read x
do 
    echo $x
    iconv -f cp1251 -t utf8 "$x">$TMP_F && cat $TMP_F > "$x"
done
egax написал 4 лет,10 месяцев назад

Используем Samba для скачивания/закачивания каталогов

Чтобы "скачать" каталог файлов по сети с машины под Windows (Samba-сервером под linux) удобно воспользоваться утилитой smbclient из пакета samba. Например.

Список доступных сетевых папок

smbclient -L 192.168.0.9 -U Администратор

Подключаемся

smbclient //192.168.0.9/E$ -U Администратор

В оболочке Samba вводим команды для "скачивания" рекурсивно папки в текущий каталог

smb:/> recurse
smb:/> prompt
smb:/> mget Документы

Аналогично можно закачать папку из текущего каталога

smb:/> recurse
smb:/> prompt
smb:/> mput home

Текущим путем является текущий путь в терминале, в котором был выполнен smbclient

egax написал 5 лет назад

Создание self-extract архива tar

Скрипт запуска extract.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
echo ""
echo "Self Extracting Installer"
echo ""

export TMPDIR=`mktemp -d /tmp/selfextract.XXXXXX`

ARCHIVE=`awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' $0`

tail -n+$ARCHIVE $0 | tar -xzv - -C $TMPDIR

CDIR=`pwd`
cd $TMPDIR
./installer

cd $CDIR
rm -rf $TMPDIR

exit 0

# newline after
__ARCHIVE_BELOW__

Пакуем скрипт запуска и архив tar.gz в bundle

cat extract.sh a.tar.gz > installer.run

Запускаем

sh installer.run
egax написал 5 лет назад

Передача пароля из командной строки ssh

Скрипт для выполнения команд через ssh без ввода пароля

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
#
# script that passes password from stdin to ssh.
#
# Copyright (C) 2010 Andre Frimberger <andre OBVIOUS_SIGN frimberger.de>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

if [ -n "$SSH_ASKPASS_TMPFILE" ]; then
    cat "$SSH_ASKPASS_TMPFILE"
    exit 0
elif [ $# -lt 1 ]; then
    echo "Usage: echo password | $0 <ssh command line options>" >&2
    exit 1
fi

sighandler() {
    rm "$TMP_PWD"
}

TMP_PWD=$(mktemp)
chmod 600 "$TMP_PWD"
trap 'sighandler' SIGHUP SIGINT SIGQUIT SIGABRT SIGKILL SIGALRM SIGTERM

export SSH_ASKPASS=$0
export SSH_ASKPASS_TMPFILE=$TMP_PWD

[ "$DISPLAY" ] || export DISPLAY=dummydisplay:0
read password
echo $password >> "$TMP_PWD"

# use setsid to detach from tty
exec setsid "$@"

rm "$TMP_PWD"

Пример вызова скрипта как asspass.sh:

echo 12345678 | ./asspass.sh ssh user@vm1 "hostname;uname;users;groups"
egax написал 5 лет назад

Сменить пароль пользователя passwd без запроса

Сменить пароль пользователя без принудительного ввода пароля можно так (по непроверенным данным работает только на RedHat-совместимых дистрибутивах)

echo HELLOWORLD | passwd --stdin
egax написал 5 лет назад

Войдите, чтобы оставлять сообщения.