Даже мысль, Вы изменили размер базового устройства в своем VM, никто не сказал фактической файловой системе, что свободное место изменилось. Ваша таблица партона на диске, вероятно, не изменилась также. Так, ext3 рассматривает Ваш корневой раздел как запускающийся в секторе X и заканчивающийся в секторе Y. То, что Вы сделали в расширении размера VDI, было, добавляют секторы в конец VDI. Таким образом, Ваш ext3 раздел, начинающийся в секторе X все еще только, расширяется на сектор Y.
В чем Вы нуждаетесь, теперь должен сделать еще две вещи. Обновите таблицу разделов так, чтобы/dev/sda запустился в секторе X и теперь расширился на недавно доступный сектор Z, затем необходимо сказать ext3 (ext2 действительно), что это может расшириться в новое пространство. В некоторых операционных системах это сделано с простым growfs -M /device
команда. В Linux кажется, что это более сложно, и включает преобразование Вашей ext3 фс к ext2 (путем удаления журнала), затем расширения раздела.
http://www.howtoforge.com/linux_resizing_ext3_partitions
Тот сайт имеет все шаги, в которых Вы будете нуждаться.
Вероятно, это потому, что ваш файл / etc / sudoers
(или любой файл, который он включает) имеет:
Defaults requiretty
... что делает sudo
требует TTY. Известно, что системы Red Hat (RHEL, Fedora ...) требуют наличия TTY в файле по умолчанию sudoers
. Это не дает реальных преимуществ в плане безопасности и может быть безопасно удалено.
Red Hat признала проблему , и она будет устранена в следующих выпусках.
Если изменение конфигурации сервера невозможно, в качестве временного решения этой неправильной конфигурации можно использовать параметры -t
или -tt
для ssh
, который порождает псевдотерминал на удаленной стороне, но имейте в виду, что он имеет ряд побочных эффектов.
-tt
предназначен для интерактивного использования. Он переводит локальный терминал в режим raw
, чтобы вы могли взаимодействовать с удаленным терминалом.Это означает, что если ssh
I / O не от / до терминала, это будет иметь побочные эффекты. Например, весь ввод будет повторен, специальные терминальные символы ( ^?
, ^ C
, ^ U
) вызовут специальную обработку; на выходе LF
будут преобразованы в CRLF
s ... (см. этот ответ на Почему этот двоичный файл изменяется? для получения дополнительной информации) подробности.
Чтобы минимизировать влияние, вы можете вызвать его как:
ssh -tt host 'stty raw -echo; sudo ...' < <(cat)
<<(cat)
позволит избежать установки локального терминала (если есть) в raw
]. И мы используем stty raw -echo
, чтобы установить линейную дисциплину удаленного терминала как проходную (эффективно, чтобы он вел себя как канал, который использовался бы вместо псевдотерминала без -tt
, хотя это применимо только после выполнения этой команды, поэтому вам нужно отложить отправку чего-либо для ввода до тех пор, пока это не произойдет).
Обратите внимание, что, поскольку вывод удаленной команды будет идти на терминал, это по-прежнему будет влиять на его буферизацию (которая будет линейной для многих приложений) и эффективность использования полосы пропускания, поскольку TCP_NODELAY
включен. Также при установке -tt
, ssh
s IPQoS до lowdelay
в отличие от пропускной способности
. Вы можете обойти и то и другое с помощью:
ssh -o IPQoS=throughput -tt host 'stty raw -echo; sudo cmd | cat' < <(cat)
Также обратите внимание, что это означает, что удаленная команда не может определить конец файла на своем стандартном вводе, а стандартный вывод и стандартный поток удаленной команды объединены в один поток.
Так что, в конце концов, не так уж и хорошо.
Если у вас есть способ создать псевдотерминал на удаленном хосте (например, с помощью expect
, zsh
, socat
, ] perl
IO :: Pty
...), тогда было бы лучше использовать это для создания псевдотерминала для присоединения sudo
к (но не для I / O) и используйте ssh
без -t
.
Например, с expect
:
ssh host 'expect -c "spawn -noecho sh -c {
exec sudo cmd >&4 2>&5 <&6 4>&- 5>&- 6<&-}
exit [lindex [wait] 3]" 4>&1 5>&2 6<&0'
Или с скриптом
(здесь предполагается реализация из util-linux
):
ssh host 'SHELL=/bin/sh script -qec "
sudo cmd <&3 >&4 2>&5 3<&- 4>&- 5>&-
" /dev/null 3<&0 4>&1 5>&2'
(при условии ( для обоих), что оболочка входа удаленного пользователя похожа на Bourne).
По умолчанию SUDO настроен на использование TTY. То есть ожидается, что SUDO будет запускаться из оболочки входа в систему. Вы можете обойти это требование, добавив переключатель -t
к вашему вызову SSH:
ssh -t someserver sudo somecommand
-t
принудительно выделяет псевдотерминал.
Если вы хотите выполнить это глобально, измените / etc / sudoers
, указав ! Requiretty
. Это можно сделать на уровне пользователя, группы или на всеобъемлющем уровне.
Используйте флаг -t
для ssh
, чтобы принудительно выделить tty.
$ ssh luci tty
not a tty
$ ssh luci -t tty
/dev/ttys003
$
Я столкнулся с этой проблемой, используя Docker и Centos 7. В итоге я сделал следующее:
yum install -y sudo
sed -i -e 's/Defaults requiretty.*/ #Defaults requiretty/g' /etc/sudoers
Я нашел этот хак на https://hub.docker.com/r/liubin/fluentd-agent/~/dockerfile
Интересной альтернативой является использование FreeIPA или IdM для централизованного управления пользователями и правилами sudoer. Затем вы можете создать правила sudo и назначить опцию
!requiretty
в правиле. После этого команда будет выполняться, как и ожидалось. Вы также получите преимущества управления всеми серверами и пользователями из единого набора конфигураций.
У меня была такая же проблема. В моем случае решением были две строки
myscript=$(cat ssh_test.sh)
ssh -t user@host "$myscript"
Пояснение:
Поместите команды, которые вы хотите запустить (, включая команды sudo ), в скрипт, например. "ssh _test.sh".
Считайте весь скрипт в переменную с именем "myscript".
Вызовите ssh всего одним -t и введите переменную вместо команды.
До этого я сталкивался с проблемами при использовании комбинации чтения из стандартного ввода и использования heredocs
Еще одна опция, которую я не увидел в ответах ни на один из таких вопросов, это open_init_pty
. Я не смог изменить конфигурацию sudo, а также предоставить -опцию t в любом количестве (на самом деле вы ничего не можете сделать, если ssh вызывается Java-программой, такой как bamboo или что-то подобное ). Внезапно man -k pty
решил мою проблему.
Итак, я решил изменить sh very_useful_script.sh
на /usr/sbin/open_init_pty /bin/sh very_useful_script.sh
. Вы не можете вызвать sudo
напрямую, например open_init_pty sudo -u wildfly id
.