Самый простой способ - использовать ddclient. Я использую его на своем сервере в сочетании с бесплатным сервером доменных имен, например dynu.com.
В ссылке есть больше документации, но ddclient
опрашивает динамический IP-адрес вашего клиента. Когда он меняется, он отправляет новый адрес на dynu.com (например). У вас будет учетная запись на dynu.com, где вы укажете свое пользовательское доменное имя. Затем вы можете напрямую подключиться к http://yourname.dynu.com, который перенаправляет на IP вашего клиента.
Преимущество использования числового IP-адреса в том, что вам не нужно постоянно обновлять конфигурацию ssh, а можно просто подключиться напрямую к доменному имени. Это очень хорошо работает на моем сервере.
В качестве альтернативы, если вы не хотите использовать этот способ и предпочитаете публиковать числовой IP-адрес где-нибудь, вот старый скрипт, который я использовал. Он использует внешнюю веб-страницу для поиска вашего локального IP, что является единственным простым способом сделать это. Затем он отправляет почту bar@email.com
, но вы можете изменить это под свои нужды. Вы можете запустить это как задание cron.
#!/usr/bin/env bash
CURRENTIP=$(curl -s http://myip.dnsomatic.com)
# Alternatively, use http://icanhazip.com
if echo $CURRENTIP | grep -qE '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ; then
if ! cmp --quiet <(echo $CURRENTIP) /home/pi/.myipaddress ; then
echo "IP address changed to ${CURRENTIP}"
echo $CURRENTIP > /home/foo/.myipaddress
echo -e "Foo's IP address has changed to ${CURRENTIP} .\n" | mail -s 'Change of IP address' bar@email.com
fi
else
echo "ERROR: IP address enquiry returns ${CURRENTIP}"
fi
Похоже, вам нужны фигурные -скобки:
scp my-machine:/home/user/a-folder/{massif,callgrind}*.
В противном случае вы сопоставляете отдельные символы, а не две полные строки.
bash
выполняет ряд различных типов расширения и замены; они задокументированы на справочной странице bash -для поиска раздела EXPANSION
. Здесь тип [
рассматривается в разделе «Расширение пути» (, он соответствует путям )и {
в разделе «Расширение фигурной скобки» (, он генерирует несколько аргументов из предоставленных параметров, независимо от присутствующих файлов ).
Файлы могут выбираться двумя способами. :шаблоны могут указываться последовательно или последовательно.
Этот метод требует использования расширенного шаблона Bash для указания нескольких шаблонов вместе. Пользователь должен включить опцию оболочки extglob
с помощью встроенного shopt
(c.f.shopt
встроенный ), поскольку расширенные шаблоны Bash по умолчанию не включены.
prompt% scp username@hostname:"/home/user/dirname/@(foo|bar)*".
Шаблон Bash sub -@(PATTERN-LIST)
позволяет указать список из одного или нескольких шаблонов, разделенных |
. Он соответствует одному из заданных шаблонов. Например, @(foo|bar)
соответствует foo
или bar
, но не соответствует foobar
, barfoo
, foofoo
, barbar
.
Звезда шара соответствует любой строке символов, включая пустую строку. Таким образом, шаблон @(foo|bar)*
соответствует всем именам файлов, которые начинаются с префикса foo
илиbar
((вложенной строки )).
Этот метод работает, когда удаленной оболочкой является Bash и ее опция оболочки extglob
включена. Пользователь может включить эту опцию Bash в своем файле конфигурации (, например.~/.bash_profile
)на удаленной машине.
Этот метод выполняет одну и ту же команду с разными аргументами несколько раз. Он работает с использованием оболочки, совместимой с POSIX.
for prefix in foo bar
do
scp username@hostname:"/home/user/dirname/${prefix}*".
done
Этот метод ненадежен, поскольку в результирующем выражении могут указываться несуществующие имена файлов.